Commit 52dc0c10d4eb9e3df449a5210dc7e3f2c32c08ea

Authored by erick.sato
1 parent 4c092b18
Exists in master

[Redmine #5011]Impedimento para atendimento simultâneos na mesma requisição

cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumo.java
@@ -10,6 +10,7 @@ import javax.persistence.FetchType; @@ -10,6 +10,7 @@ import javax.persistence.FetchType;
10 import javax.persistence.GeneratedValue; 10 import javax.persistence.GeneratedValue;
11 import javax.persistence.GenerationType; 11 import javax.persistence.GenerationType;
12 import javax.persistence.Id; 12 import javax.persistence.Id;
  13 +import javax.persistence.JoinColumn;
13 import javax.persistence.ManyToOne; 14 import javax.persistence.ManyToOne;
14 import javax.persistence.OneToMany; 15 import javax.persistence.OneToMany;
15 import javax.persistence.Table; 16 import javax.persistence.Table;
@@ -26,6 +27,7 @@ import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer; @@ -26,6 +27,7 @@ import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer;
26 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer; 27 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
27 import br.com.centralit.framework.json.Views; 28 import br.com.centralit.framework.json.Views;
28 import br.com.centralit.framework.model.Dominio; 29 import br.com.centralit.framework.model.Dominio;
  30 +import br.com.centralit.framework.model.Usuario;
29 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao; 31 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
30 32
31 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 33 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -68,8 +70,8 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -68,8 +70,8 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
68 @Audited 70 @Audited
69 @AuditTable(value = "alm_requisicaoconsumo_aud") 71 @AuditTable(value = "alm_requisicaoconsumo_aud")
70 @Entity 72 @Entity
71 -@Table(name="alm_requisicaoconsumo")  
72 -@JsonIgnoreProperties({"$checked"}) 73 +@Table(name = "alm_requisicaoconsumo")
  74 +@JsonIgnoreProperties({ "$checked" })
73 public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { 75 public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
74 76
75 public static final Long TIPO_STATUS_REQUISICAO_NAO_CONCLUIDA_CODIGO = 1L; 77 public static final Long TIPO_STATUS_REQUISICAO_NAO_CONCLUIDA_CODIGO = 1L;
@@ -88,17 +90,22 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -88,17 +90,22 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
88 /** Atributo id. */ 90 /** Atributo id. */
89 @Id 91 @Id
90 @GeneratedValue(strategy = GenerationType.AUTO) 92 @GeneratedValue(strategy = GenerationType.AUTO)
91 - @JsonView({ Views.GenericView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class }) 93 + @JsonView({ Views.GenericView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class,
  94 + ViewsAlmoxarifado.DevolucaoEditView.class })
92 private Long id; 95 private Long id;
93 96
94 /** Atributo almoxaifado. */ 97 /** Atributo almoxaifado. */
95 @ManyToOne(fetch = FetchType.LAZY, optional = false) 98 @ManyToOne(fetch = FetchType.LAZY, optional = false)
96 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 99 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  100 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,
  101 + ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class,
  102 + ViewsAdmMateriais.RequisicaoConsumo.class })
97 private EstruturaOrganizacional almoxarifado; 103 private EstruturaOrganizacional almoxarifado;
98 104
99 /** Atributo centroCusto. */ 105 /** Atributo centroCusto. */
100 @ManyToOne(fetch = FetchType.LAZY) 106 @ManyToOne(fetch = FetchType.LAZY)
101 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 107 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class,
  108 + ViewsAdmMateriais.RequisicaoConsumo.class })
102 private CentroCusto centroCusto; 109 private CentroCusto centroCusto;
103 110
104 /** Atributo dataRequisicao. */ 111 /** Atributo dataRequisicao. */
@@ -106,28 +113,33 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -106,28 +113,33 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
106 @Temporal(TemporalType.TIMESTAMP) 113 @Temporal(TemporalType.TIMESTAMP)
107 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 114 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
108 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 115 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
109 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,  
110 - ViewsAlmoxarifado.DevolucaoListView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 116 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  117 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,
  118 + ViewsAlmoxarifado.DevolucaoListView.class, ViewsAdmMateriais.RequisicaoConsumo.class })
111 private Calendar dataRequisicao; 119 private Calendar dataRequisicao;
112 120
113 @Column(name = "dataFinalizacaoAtendimento", nullable = true) 121 @Column(name = "dataFinalizacaoAtendimento", nullable = true)
114 @Temporal(TemporalType.TIMESTAMP) 122 @Temporal(TemporalType.TIMESTAMP)
115 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 123 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
116 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 124 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
117 - @JsonView({ ViewsAlmoxarifado.DevolucaoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,  
118 - Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 125 + @JsonView({ ViewsAlmoxarifado.DevolucaoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class,
  126 + ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class,
  127 + ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class })
119 private Calendar dataFinalizacaoAtendimento; 128 private Calendar dataFinalizacaoAtendimento;
120 129
121 /** Atributo materiais. */ 130 /** Atributo materiais. */
122 @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true) 131 @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true)
123 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,  
124 - Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 132 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  133 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,
  134 + Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class })
125 private Collection<RequisicaoConsumoItem> requisicaoConsumoItens; 135 private Collection<RequisicaoConsumoItem> requisicaoConsumoItens;
126 136
127 /** Atributo numeroRequisicao. */ 137 /** Atributo numeroRequisicao. */
128 @Column(length = 30) 138 @Column(length = 30)
129 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,  
130 - ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 139 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  140 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,
  141 + ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class,
  142 + ViewsAdmMateriais.RequisicaoConsumo.class })
131 private String numeroRequisicao; 143 private String numeroRequisicao;
132 144
133 /** Atributo observacoes. */ 145 /** Atributo observacoes. */
@@ -138,16 +150,27 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -138,16 +150,27 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
138 150
139 /** Atributo statusRequisicao. */ 151 /** Atributo statusRequisicao. */
140 @ManyToOne(fetch = FetchType.LAZY, optional = false) 152 @ManyToOne(fetch = FetchType.LAZY, optional = false)
141 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.AtendimentoRequisicaoConsumoItemView.class, Views.MaterialConsultaInfo.class,  
142 - ViewsAdmMateriais.RequisicaoConsumo.class }) 153 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  154 + ViewsAdmMateriais.AtendimentoRequisicaoConsumoItemView.class, Views.MaterialConsultaInfo.class,
  155 + ViewsAdmMateriais.RequisicaoConsumo.class })
143 private Dominio tipoStatusRequisicao; 156 private Dominio tipoStatusRequisicao;
144 157
145 /** Atributo unidadeRequisitante. */ 158 /** Atributo unidadeRequisitante. */
146 @ManyToOne(fetch = FetchType.LAZY, optional = false) 159 @ManyToOne(fetch = FetchType.LAZY, optional = false)
147 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,  
148 - ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 160 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  161 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,
  162 + ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class,
  163 + ViewsAdmMateriais.RequisicaoConsumo.class })
149 private EstruturaOrganizacional unidadeRequisitante; 164 private EstruturaOrganizacional unidadeRequisitante;
150 165
  166 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  167 + private boolean emAtendimento;
  168 +
  169 + @ManyToOne(fetch = FetchType.LAZY)
  170 + @JoinColumn(name = "atendente_id")
  171 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  172 + private Usuario atendente;
  173 +
151 /** 174 /**
152 * Retorna o valor do atributo <code>id</code> 175 * Retorna o valor do atributo <code>id</code>
153 * 176 *
@@ -351,4 +374,20 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -351,4 +374,20 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
351 this.dataFinalizacaoAtendimento = dataFinalizacaoAtendimento; 374 this.dataFinalizacaoAtendimento = dataFinalizacaoAtendimento;
352 } 375 }
353 376
  377 + public boolean isEmAtendimento() {
  378 + return emAtendimento;
  379 + }
  380 +
  381 + public void setEmAtendimento(boolean emAtendimento) {
  382 + this.emAtendimento = emAtendimento;
  383 + }
  384 +
  385 + public Usuario getAtendente() {
  386 + return atendente;
  387 + }
  388 +
  389 + public void setAtendente(Usuario atendente) {
  390 + this.atendente = atendente;
  391 + }
  392 +
354 } 393 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java
@@ -129,4 +129,6 @@ public interface RequisicaoConsumoService extends GenericService&lt;RequisicaoConsu @@ -129,4 +129,6 @@ public interface RequisicaoConsumoService extends GenericService&lt;RequisicaoConsu
129 129
130 List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH); 130 List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH);
131 131
  132 + Boolean atualizarSituacaoAtendimento(Long idRequisicao, boolean situacaoAtendimento);
  133 +
132 } 134 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java
@@ -522,7 +522,31 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC @@ -522,7 +522,31 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC
522 522
523 @Override 523 @Override
524 public List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH) { 524 public List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH) {
525 - return this.requisicaoConsumoDao.findRequisicoesParaAtendimento(atendimentoVH); 525 + List<RequisicaoConsumo> requisicoes = this.requisicaoConsumoDao.findRequisicoesParaAtendimento(atendimentoVH);
  526 + this.atualizarStatusAtendimento(requisicoes);
  527 + return requisicoes;
  528 + }
  529 +
  530 + private void atualizarStatusAtendimento(List<RequisicaoConsumo> requisicoes) {
  531 + Usuario usuarioLogado = (Usuario) usuarioService.find(( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
  532 + for (RequisicaoConsumo requisicaoConsumo : requisicoes) {
  533 + requisicaoConsumo.setEmAtendimento(Boolean.TRUE);
  534 + requisicaoConsumo.setAtendente(usuarioLogado);
  535 + super.merge(requisicaoConsumo);
  536 + flush();
  537 + }
  538 +
  539 + }
  540 +
  541 + @Override
  542 + public Boolean atualizarSituacaoAtendimento(Long idRequisicao, boolean situacaoAtendimento) {
  543 + RequisicaoConsumo requisicaoConsumo = this.find(idRequisicao);
  544 + requisicaoConsumo.setEmAtendimento(situacaoAtendimento);
  545 + if(!situacaoAtendimento){
  546 + requisicaoConsumo.setAtendente(null);
  547 + }
  548 + super.merge(requisicaoConsumo);
  549 + return true;
526 } 550 }
527 551
528 } 552 }
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java
@@ -239,4 +239,14 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon @@ -239,4 +239,14 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon
239 return responseBody; 239 return responseBody;
240 } 240 }
241 241
  242 + @RequestMapping(value = "/atualizarSituacaoAtendimento", method = RequestMethod.GET, produces = "application/json")
  243 + @ResponseBody
  244 + public ResponseBodyWrapper atualizarSituacaoAtendimento(@RequestParam(value = "idRequisicao") Long idRequisicao, @RequestParam(value = "situacaoAtendimento") boolean situacaoAtendimento) {
  245 +
  246 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.requisicaoConsumoService.atualizarSituacaoAtendimento(idRequisicao, situacaoAtendimento), getEditView());
  247 +
  248 + return responseBody;
  249 + }
  250 +
  251 +
242 } 252 }
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
@@ -329,6 +329,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -329,6 +329,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
329 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LIMPAR_BUSCA_AVANCADA", "Limpar busca avançada", dominio, modulo)); 329 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LIMPAR_BUSCA_AVANCADA", "Limpar busca avançada", dominio, modulo));
330 330
331 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_REQUISICAO", "Atendimento de requisição consumo", dominio, modulo)); 331 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_REQUISICAO", "Atendimento de requisição consumo", dominio, modulo));
  332 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_INICIADO", "Atendimento iniciado", dominio, modulo));
  333 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.INTERROMPER_ATENDIMENTO_INICIADO", "Interromper atendimento iniciado", dominio, modulo));
332 } 334 }
333 335
334 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { 336 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
@@ -417,6 +419,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -417,6 +419,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
417 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INFO_FILTRO_MATERIAL_REQUISICAO", "O atendimento será realizado para os materiais selecionados na busca avançada.", dominio, modulo)); 419 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INFO_FILTRO_MATERIAL_REQUISICAO", "O atendimento será realizado para os materiais selecionados na busca avançada.", dominio, modulo));
418 420
419 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REMOVER_REQUISICAO_ATENDIMENTO", "Remover requisição deste atendimento", dominio, modulo)); 421 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REMOVER_REQUISICAO_ATENDIMENTO", "Remover requisição deste atendimento", dominio, modulo));
  422 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REQUISICAO_EM_ATENDIMENTO", "está em atendimento pelo atendente ", dominio, modulo));
  423 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.DESMARQUE_REQUISICAO_EM_ATENDIMENTO", "Desmarque esta requisição de consumo para prosseguir o atendimento.", dominio, modulo));
420 424
421 } 425 }
422 } 426 }
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js
@@ -90,14 +90,16 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -90,14 +90,16 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
90 $scope.$openModalConfirm({ 90 $scope.$openModalConfirm({
91 message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'), 91 message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
92 callback: function(){ 92 callback: function(){
93 - $scope.atendimentos.splice(index, 1); 93 + var requisicaoRemover = $scope.atendimentos[index];
  94 + RequisicaoConsumoRepository.atualizarSituacaoAtendimento(requisicaoRemover.requisicaoConsumo.id, false).then(function(result) {
  95 + $scope.atendimentos.splice(index, 1);
  96 + $scope.$modalConfirmInstance.dismiss('cancel');
  97 + if($scope.atendimentos.length == 0){
  98 + $scope.$showPageSearchWorkspace($scope.workspace);
  99 + $scope.atualizaPaginaPesquisa();
  100 + }
  101 + });
94 102
95 - $scope.$modalConfirmInstance.dismiss('cancel');  
96 -  
97 - if($scope.atendimentos.length == 0){  
98 - $scope.$showPageSearchWorkspace($scope.workspace);  
99 - $scope.atualizaPaginaPesquisa();  
100 - }  
101 } 103 }
102 }); 104 });
103 }; 105 };
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js
@@ -6,6 +6,7 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -6,6 +6,7 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
6 function AtendimentoRequisicaoConsumoListController($scope, AtendimentoRequisicaoConsumoRepository, $translate, 6 function AtendimentoRequisicaoConsumoListController($scope, AtendimentoRequisicaoConsumoRepository, $translate,
7 $timeout, DominioRepository, RequisicaoConsumoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, MaterialConsumoRepository, $filter) { 7 $timeout, DominioRepository, RequisicaoConsumoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, MaterialConsumoRepository, $filter) {
8 $scope.$showAdvancedFilters = false; 8 $scope.$showAdvancedFilters = false;
  9 + $scope.permiteInterromperAtendimento = false;
9 $scope.listaSelecionados = []; 10 $scope.listaSelecionados = [];
10 $scope.resetForm = function() { 11 $scope.resetForm = function() {
11 angular.element("#editAtendimentoRequisicaoConsumo").scope().resetForm(); 12 angular.element("#editAtendimentoRequisicaoConsumo").scope().resetForm();
@@ -22,19 +23,22 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -22,19 +23,22 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
22 {title : $translate.instant('ALMOXARIFADO.LABEL.STATUS_REQUISICAO'), value : 'tipoStatusRequisicao.descricao' } , 23 {title : $translate.instant('ALMOXARIFADO.LABEL.STATUS_REQUISICAO'), value : 'tipoStatusRequisicao.descricao' } ,
23 {title : $translate.instant('ALMOXARIFADO.LABEL.DATA_REQUISICAO'), value : 'dataRequisicao' , filter : 'dateBR', tamanho : 28} , 24 {title : $translate.instant('ALMOXARIFADO.LABEL.DATA_REQUISICAO'), value : 'dataRequisicao' , filter : 'dateBR', tamanho : 28} ,
24 {title : $translate.instant('ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE'), value : 'unidadeRequisitante.nome' } , 25 {title : $translate.instant('ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE'), value : 'unidadeRequisitante.nome' } ,
25 - {title : $translate.instant('ALMOXARIFADO.LABEL.ALMOXARIFADO'), value : 'almoxarifado.nome' } ]; 26 + {title : $translate.instant('ALMOXARIFADO.LABEL.ALMOXARIFADO'), value : 'almoxarifado.nome' },
  27 + {title : $translate.instant('ALMOXARIFADO.LABEL.ATENDIMENTO_INICIADO'), value : 'emAtendimento'}];
26 // DIFINE FILTROS DE PESQUISA E CAMPOS QUE DEVEM SER APRESENTADOS NA LISTAGEM 28 // DIFINE FILTROS DE PESQUISA E CAMPOS QUE DEVEM SER APRESENTADOS NA LISTAGEM
27 $scope.filterCriteria = { 29 $scope.filterCriteria = {
28 start : 1, 30 start : 1,
29 dir : 'asc', 31 dir : 'asc',
30 sort : 'desc:numeroRequisicao;tipoStatusRequisicao.codigo', 32 sort : 'desc:numeroRequisicao;tipoStatusRequisicao.codigo',
31 limit : 10, 33 limit : 10,
32 - fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'tipoStatusRequisicao.codigo'], 34 + fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'tipoStatusRequisicao.codigo',
  35 + 'emAtendimento', 'atendente.id', 'atendente.username'],
33 filters : [ {type : 'numeric-range', field : 'numeroRequisicao' } , 36 filters : [ {type : 'numeric-range', field : 'numeroRequisicao' } ,
34 {type : 'dominio', field : 'tipoStatusRequisicao.descricao', listaDominio : []} , 37 {type : 'dominio', field : 'tipoStatusRequisicao.descricao', listaDominio : []} ,
35 {type : 'date-range', field : 'dataRequisicao' } , 38 {type : 'date-range', field : 'dataRequisicao' } ,
36 {type : 'string', field : 'unidadeRequisitante.nome' } , 39 {type : 'string', field : 'unidadeRequisitante.nome' } ,
37 - {type : 'string', field : 'almoxarifado.nome' } ] 40 + {type : 'string', field : 'almoxarifado.nome' },
  41 + {type : 'boolean', field : 'emAtendimento' }]
38 }; 42 };
39 43
40 $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'DEVOLVIDA', comparison: 'ne', notFilter : true}); 44 $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'DEVOLVIDA', comparison: 'ne', notFilter : true});
@@ -108,6 +112,13 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -108,6 +112,13 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
108 permiteAtender = false; 112 permiteAtender = false;
109 $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA')); 113 $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA'));
110 } 114 }
  115 + if(requisicaoSelecionado.emAtendimento && requisicaoSelecionado['atendente.id'] != $scope.usuarioLogado.id){
  116 + permiteAtender = false;
  117 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.LABEL.REQUISICAO_CONSUMO') + ' ' + requisicaoSelecionado.numeroRequisicao
  118 + + ' ' + $translate.instant('ALMOXARIFADO.MSG.REQUISICAO_EM_ATENDIMENTO') + ' ' + requisicaoSelecionado['atendente.username']
  119 + + ' ' + $translate.instant('ALMOXARIFADO.MSG.DESMARQUE_REQUISICAO_EM_ATENDIMENTO'));
  120 + return;
  121 + }
111 }); 122 });
112 123
113 if(permiteAtender){ 124 if(permiteAtender){
@@ -323,4 +334,5 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -323,4 +334,5 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
323 334
324 }; 335 };
325 336
  337 +
326 }]); 338 }]);
327 \ No newline at end of file 339 \ No newline at end of file
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/RequisicaoConsumoRepository.js
@@ -26,6 +26,10 @@ citApp.factory(&#39;RequisicaoConsumoRepository&#39;, [&#39;RestangularAlmoxarifado&#39;, &#39;Abstr @@ -26,6 +26,10 @@ citApp.factory(&#39;RequisicaoConsumoRepository&#39;, [&#39;RestangularAlmoxarifado&#39;, &#39;Abstr
26 this.filtrarRequisicoesAtendimento = function(atendimentoVH) { 26 this.filtrarRequisicoesAtendimento = function(atendimentoVH) {
27 return this.restangular.all(this.route+ "/filtrarRequisicoesAtendimento").post(atendimentoVH); 27 return this.restangular.all(this.route+ "/filtrarRequisicoesAtendimento").post(atendimentoVH);
28 }; 28 };
  29 +
  30 + this.atualizarSituacaoAtendimento = function(idRequisicao, situacaoAtendimento){
  31 + return this.restangular.one(this.route + "/atualizarSituacaoAtendimento").get({'idRequisicao': idRequisicao, 'situacaoAtendimento': situacaoAtendimento}).then();
  32 + };
29 } 33 }
30 34
31 AbstractRepository.extend(RequisicaoConsumoRepository); 35 AbstractRepository.extend(RequisicaoConsumoRepository);
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html
@@ -23,6 +23,11 @@ @@ -23,6 +23,11 @@
23 <translate>LABEL.VISUALIZAR</translate> 23 <translate>LABEL.VISUALIZAR</translate>
24 </button> 24 </button>
25 25
  26 + <button ng-show="permiteInterromperAtendimento" class="btn btn-clear" ng-click="interromperAtendimentoIniciado()">
  27 + <i class="fa fa-times-circle-o orange"></i>
  28 + <translate>ALMOXARIFADO.LABEL.INTERROMPER_ATENDIMENTO_INICIADO</translate>
  29 + </button>
  30 +
26 <span class="divider-vertical"></span> 31 <span class="divider-vertical"></span>
27 32
28 <filtros ng-filter="filterCriteria" ng-workspace="workspace"></filtros> 33 <filtros ng-filter="filterCriteria" ng-workspace="workspace"></filtros>
@@ -58,7 +63,7 @@ @@ -58,7 +63,7 @@
58 63
59 <list-view ng-lista="atendimentoRequisicaoConsumoList" ng-repository="RequisicaoConsumoRepository" ng-use-custom-remove="false" 64 <list-view ng-lista="atendimentoRequisicaoConsumoList" ng-repository="RequisicaoConsumoRepository" ng-use-custom-remove="false"
60 ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="atendimentoRequisicaoConsumoChecked" 65 ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="atendimentoRequisicaoConsumoChecked"
61 - ng-lista-itens-selecionados="listaSelecionados" ng-check-on="true" 66 + ng-lista-itens-selecionados="listaSelecionados" ng-check-on="true" ng-exibir-boolean-sim-nao="true"
62 set-total-pages="setTotalPages" set-total-itens="setTotalItens" 67 set-total-pages="setTotalPages" set-total-itens="setTotalItens"
63 use-custom-filter-temp="filtrarCustomizado" ng-custom-filter="filtrarRequisicoes()"></list-view> 68 use-custom-filter-temp="filtrarCustomizado" ng-custom-filter="filtrarRequisicoes()"></list-view>
64 69