diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumo.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumo.java index ecc6343..591465d 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumo.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumo.java @@ -10,6 +10,7 @@ import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; @@ -26,6 +27,7 @@ import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer; import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer; import br.com.centralit.framework.json.Views; import br.com.centralit.framework.model.Dominio; +import br.com.centralit.framework.model.Usuario; import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -68,8 +70,8 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; @Audited @AuditTable(value = "alm_requisicaoconsumo_aud") @Entity -@Table(name="alm_requisicaoconsumo") -@JsonIgnoreProperties({"$checked"}) +@Table(name = "alm_requisicaoconsumo") +@JsonIgnoreProperties({ "$checked" }) public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { public static final Long TIPO_STATUS_REQUISICAO_NAO_CONCLUIDA_CODIGO = 1L; @@ -88,17 +90,22 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { /** Atributo id. */ @Id @GeneratedValue(strategy = GenerationType.AUTO) - @JsonView({ Views.GenericView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class }) + @JsonView({ Views.GenericView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, + ViewsAlmoxarifado.DevolucaoEditView.class }) private Long id; /** Atributo almoxaifado. */ @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, + ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, + ViewsAdmMateriais.RequisicaoConsumo.class }) private EstruturaOrganizacional almoxarifado; /** Atributo centroCusto. */ @ManyToOne(fetch = FetchType.LAZY) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class, + ViewsAdmMateriais.RequisicaoConsumo.class }) private CentroCusto centroCusto; /** Atributo dataRequisicao. */ @@ -106,28 +113,33 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @Temporal(TemporalType.TIMESTAMP) @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class, - ViewsAlmoxarifado.DevolucaoListView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class, + ViewsAlmoxarifado.DevolucaoListView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) private Calendar dataRequisicao; @Column(name = "dataFinalizacaoAtendimento", nullable = true) @Temporal(TemporalType.TIMESTAMP) @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) - @JsonView({ ViewsAlmoxarifado.DevolucaoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, - Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAlmoxarifado.DevolucaoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, + ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class, + ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) private Calendar dataFinalizacaoAtendimento; /** Atributo materiais. */ @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class, - Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class, + Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) private Collection requisicaoConsumoItens; /** Atributo numeroRequisicao. */ @Column(length = 30) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class, - ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class, + ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class, + ViewsAdmMateriais.RequisicaoConsumo.class }) private String numeroRequisicao; /** Atributo observacoes. */ @@ -138,16 +150,27 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { /** Atributo statusRequisicao. */ @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.AtendimentoRequisicaoConsumoItemView.class, Views.MaterialConsultaInfo.class, - ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, + ViewsAdmMateriais.AtendimentoRequisicaoConsumoItemView.class, Views.MaterialConsultaInfo.class, + ViewsAdmMateriais.RequisicaoConsumo.class }) private Dominio tipoStatusRequisicao; /** Atributo unidadeRequisitante. */ @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, - ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, + ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, + ViewsAdmMateriais.RequisicaoConsumo.class }) private EstruturaOrganizacional unidadeRequisitante; + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class }) + private boolean emAtendimento; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "atendente_id") + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class }) + private Usuario atendente; + /** * Retorna o valor do atributo id * @@ -351,4 +374,20 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { this.dataFinalizacaoAtendimento = dataFinalizacaoAtendimento; } + public boolean isEmAtendimento() { + return emAtendimento; + } + + public void setEmAtendimento(boolean emAtendimento) { + this.emAtendimento = emAtendimento; + } + + public Usuario getAtendente() { + return atendente; + } + + public void setAtendente(Usuario atendente) { + this.atendente = atendente; + } + } diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java index 0b8d1a0..bf1dfb6 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java @@ -129,4 +129,6 @@ public interface RequisicaoConsumoService extends GenericService findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH); + Boolean atualizarSituacaoAtendimento(Long idRequisicao, boolean situacaoAtendimento); + } diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java index 03e0904..611c9ae 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java @@ -522,7 +522,31 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH) { - return this.requisicaoConsumoDao.findRequisicoesParaAtendimento(atendimentoVH); + List requisicoes = this.requisicaoConsumoDao.findRequisicoesParaAtendimento(atendimentoVH); + this.atualizarStatusAtendimento(requisicoes); + return requisicoes; + } + + private void atualizarStatusAtendimento(List requisicoes) { + Usuario usuarioLogado = (Usuario) usuarioService.find(( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId()); + for (RequisicaoConsumo requisicaoConsumo : requisicoes) { + requisicaoConsumo.setEmAtendimento(Boolean.TRUE); + requisicaoConsumo.setAtendente(usuarioLogado); + super.merge(requisicaoConsumo); + flush(); + } + + } + + @Override + public Boolean atualizarSituacaoAtendimento(Long idRequisicao, boolean situacaoAtendimento) { + RequisicaoConsumo requisicaoConsumo = this.find(idRequisicao); + requisicaoConsumo.setEmAtendimento(situacaoAtendimento); + if(!situacaoAtendimento){ + requisicaoConsumo.setAtendente(null); + } + super.merge(requisicaoConsumo); + return true; } } diff --git a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java index 6f2c13b..e7d7e91 100644 --- a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java +++ b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java @@ -239,4 +239,14 @@ public class RequisicaoConsumoController extends GenericController internacionalizacaoList) { @@ -417,6 +419,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INFO_FILTRO_MATERIAL_REQUISICAO", "O atendimento será realizado para os materiais selecionados na busca avançada.", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REMOVER_REQUISICAO_ATENDIMENTO", "Remover requisição deste atendimento", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REQUISICAO_EM_ATENDIMENTO", "está em atendimento pelo atendente ", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.DESMARQUE_REQUISICAO_EM_ATENDIMENTO", "Desmarque esta requisição de consumo para prosseguir o atendimento.", dominio, modulo)); } } diff --git a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js index 4a330e9..88878ea 100644 --- a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js +++ b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js @@ -90,14 +90,16 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', $scope.$openModalConfirm({ message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'), callback: function(){ - $scope.atendimentos.splice(index, 1); + var requisicaoRemover = $scope.atendimentos[index]; + RequisicaoConsumoRepository.atualizarSituacaoAtendimento(requisicaoRemover.requisicaoConsumo.id, false).then(function(result) { + $scope.atendimentos.splice(index, 1); + $scope.$modalConfirmInstance.dismiss('cancel'); + if($scope.atendimentos.length == 0){ + $scope.$showPageSearchWorkspace($scope.workspace); + $scope.atualizaPaginaPesquisa(); + } + }); - $scope.$modalConfirmInstance.dismiss('cancel'); - - if($scope.atendimentos.length == 0){ - $scope.$showPageSearchWorkspace($scope.workspace); - $scope.atualizaPaginaPesquisa(); - } } }); }; diff --git a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js index 5776511..d27ac50 100644 --- a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js +++ b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js @@ -6,6 +6,7 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten function AtendimentoRequisicaoConsumoListController($scope, AtendimentoRequisicaoConsumoRepository, $translate, $timeout, DominioRepository, RequisicaoConsumoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, MaterialConsumoRepository, $filter) { $scope.$showAdvancedFilters = false; + $scope.permiteInterromperAtendimento = false; $scope.listaSelecionados = []; $scope.resetForm = function() { angular.element("#editAtendimentoRequisicaoConsumo").scope().resetForm(); @@ -22,19 +23,22 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten {title : $translate.instant('ALMOXARIFADO.LABEL.STATUS_REQUISICAO'), value : 'tipoStatusRequisicao.descricao' } , {title : $translate.instant('ALMOXARIFADO.LABEL.DATA_REQUISICAO'), value : 'dataRequisicao' , filter : 'dateBR', tamanho : 28} , {title : $translate.instant('ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE'), value : 'unidadeRequisitante.nome' } , - {title : $translate.instant('ALMOXARIFADO.LABEL.ALMOXARIFADO'), value : 'almoxarifado.nome' } ]; + {title : $translate.instant('ALMOXARIFADO.LABEL.ALMOXARIFADO'), value : 'almoxarifado.nome' }, + {title : $translate.instant('ALMOXARIFADO.LABEL.ATENDIMENTO_INICIADO'), value : 'emAtendimento'}]; // DIFINE FILTROS DE PESQUISA E CAMPOS QUE DEVEM SER APRESENTADOS NA LISTAGEM $scope.filterCriteria = { start : 1, dir : 'asc', sort : 'desc:numeroRequisicao;tipoStatusRequisicao.codigo', limit : 10, - fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'tipoStatusRequisicao.codigo'], + fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'tipoStatusRequisicao.codigo', + 'emAtendimento', 'atendente.id', 'atendente.username'], filters : [ {type : 'numeric-range', field : 'numeroRequisicao' } , {type : 'dominio', field : 'tipoStatusRequisicao.descricao', listaDominio : []} , {type : 'date-range', field : 'dataRequisicao' } , {type : 'string', field : 'unidadeRequisitante.nome' } , - {type : 'string', field : 'almoxarifado.nome' } ] + {type : 'string', field : 'almoxarifado.nome' }, + {type : 'boolean', field : 'emAtendimento' }] }; $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'DEVOLVIDA', comparison: 'ne', notFilter : true}); @@ -108,6 +112,13 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten permiteAtender = false; $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA')); } + if(requisicaoSelecionado.emAtendimento && requisicaoSelecionado['atendente.id'] != $scope.usuarioLogado.id){ + permiteAtender = false; + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.LABEL.REQUISICAO_CONSUMO') + ' ' + requisicaoSelecionado.numeroRequisicao + + ' ' + $translate.instant('ALMOXARIFADO.MSG.REQUISICAO_EM_ATENDIMENTO') + ' ' + requisicaoSelecionado['atendente.username'] + + ' ' + $translate.instant('ALMOXARIFADO.MSG.DESMARQUE_REQUISICAO_EM_ATENDIMENTO')); + return; + } }); if(permiteAtender){ @@ -323,4 +334,5 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten }; + }]); \ No newline at end of file diff --git a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/RequisicaoConsumoRepository.js b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/RequisicaoConsumoRepository.js index 63d2b80..7e73bdd 100644 --- a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/RequisicaoConsumoRepository.js +++ b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/RequisicaoConsumoRepository.js @@ -26,6 +26,10 @@ citApp.factory('RequisicaoConsumoRepository', ['RestangularAlmoxarifado', 'Abstr this.filtrarRequisicoesAtendimento = function(atendimentoVH) { return this.restangular.all(this.route+ "/filtrarRequisicoesAtendimento").post(atendimentoVH); }; + + this.atualizarSituacaoAtendimento = function(idRequisicao, situacaoAtendimento){ + return this.restangular.one(this.route + "/atualizarSituacaoAtendimento").get({'idRequisicao': idRequisicao, 'situacaoAtendimento': situacaoAtendimento}).then(); + }; } AbstractRepository.extend(RequisicaoConsumoRepository); diff --git a/cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html b/cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html index 62e0115..e56b2f2 100644 --- a/cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html +++ b/cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html @@ -23,6 +23,11 @@ LABEL.VISUALIZAR + + @@ -58,7 +63,7 @@ -- libgit2 0.21.2