From a06a649b45898b353875b0efd66589b03bed3484 Mon Sep 17 00:00:00 2001 From: erick.sato Date: Tue, 17 May 2016 11:43:50 -0300 Subject: [PATCH] [Redmine Atendimento #4935]List atendimentos --- cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoService.java | 4 ++++ cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java | 23 ++++++++++++++++++++--- cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java | 9 +++++++++ cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/AtendimentoRequisicaoConsumoRepository.js | 10 +++++++++- cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html | 21 ++++++++------------- 7 files changed, 197 insertions(+), 24 deletions(-) diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoService.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoService.java index 39c5c71..26cb102 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoService.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoService.java @@ -65,4 +65,8 @@ public interface AtendimentoRequisicaoConsumoService extends GenericService idsRequisicao, Long idOrganizacao); + + Boolean excluirAtendimentos(List idsRequisicao, Long idOrganizacao); + } diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java index 923220f..1cb7821 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -19,6 +20,7 @@ import br.com.centralit.api.service.AtendimentoRequisicaoConsumoItemService; import br.com.centralit.api.service.AtendimentoRequisicaoConsumoService; import br.com.centralit.api.service.ContaContabilMovimentoService; import br.com.centralit.api.service.DominioService; +import br.com.centralit.api.service.InternacionalizacaoService; import br.com.centralit.api.service.MaterialConsumoService; import br.com.centralit.api.service.MovimentoEstoqueService; import br.com.centralit.api.service.ConfiguracaoParametroSistemaService; @@ -27,6 +29,7 @@ import br.com.centralit.api.service.RequisicaoConsumoService; import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH; import br.com.centralit.framework.exception.BusinessException; import br.com.centralit.framework.exception.CodigoErro; +import br.com.centralit.framework.model.Dominio; import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; import br.com.centralit.framework.util.UtilColecao; import br.com.centralit.framework.util.UtilDate; @@ -98,7 +101,19 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl< @Autowired private ContaContabilMovimentoService contaContabilMovimentoService; + + @Autowired + private InternacionalizacaoService internacionalizacaoService; + private Dominio idioma; + + private Dominio getIdioma() { + if(!UtilObjeto.isReferencia(idioma)){ + idioma = this.dominioService.findByChaveAndCodigo("tipoIdioma", Dominio.TIPO_IDIOMA_PT_BR_CODIGO); + } + return idioma; + } + /** * Responsável pela criação de novas instâncias desta classe. * @@ -462,4 +477,40 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl< return true; } + @Override + public Boolean finalizarRequisicoes(List idsRequisicao, Long idOrganizacao) { + for (Long idRequisicao : idsRequisicao) { + List listaAtendimentoPorRequisicaoConsumo = this.listaAtendimentoPorRequisicaoConsumo(idRequisicao, idOrganizacao); + for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) { + atendimentoRequisicaoConsumo.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_FINALIZADA)); + super.merge(atendimentoRequisicaoConsumo); + } + } + return true; + } + + @Override + public Boolean excluirAtendimentos(List idsRequisicao, Long idOrganizacao) { + for (Long idRequisicao : idsRequisicao) { + List listaAtendimentoPorRequisicaoConsumo = this.listaAtendimentoPorRequisicaoConsumo(idRequisicao, idOrganizacao); + StringBuilder mensagem = new StringBuilder(); + for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) { + if (!UtilDate.isDentroMes(atendimentoRequisicaoConsumo.getRequisicaoConsumo().getDataFinalizacaoAtendimento(), atendimentoRequisicaoConsumo.getRequisicaoConsumo().getOrganizacao().getDataReferenciaVigente())) { + String validacao = this.internacionalizacaoService.getTranslate("ALMOXARIFADO.VALIDACAO.DATA_FINALIZACAO_FORA_REFERENCIA", this.getIdioma()); + validacao = String.format(validacao, atendimentoRequisicaoConsumo.getRequisicaoConsumo().getNumeroRequisicao()); + validacao += "

"; + mensagem.append(validacao); + } + } + if(StringUtils.isNotBlank(mensagem.toString())){ + throw new BusinessException(mensagem.toString(), CodigoErro.REGRA_NEGOCIO.getValue()); + }else{ + for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) { + this.remove(atendimentoRequisicaoConsumo); + } + } + } + return true; + } + } diff --git a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java index c82b66d..a14bc78 100644 --- a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java +++ b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java @@ -10,10 +10,14 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import com.googlecode.genericdao.search.Search; +import com.googlecode.genericdao.search.SearchResult; + import br.com.centralit.api.framework.json.ViewsAlmoxarifado; import br.com.centralit.api.model.AtendimentoRequisicaoConsumo; import br.com.centralit.api.model.RequisicaoConsumo; import br.com.centralit.api.service.AtendimentoRequisicaoConsumoService; +import br.com.centralit.api.viewHelper.AtendimentoVH; import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH; import br.com.centralit.framework.controller.GenericController; import br.com.centralit.framework.dao.arquitetura.SearchSeven; @@ -23,9 +27,6 @@ import br.com.centralit.framework.model.SearchParams; import br.com.centralit.framework.view.GridVH; import br.com.centralit.framework.view.ResultResponseVH; -import com.googlecode.genericdao.search.Search; -import com.googlecode.genericdao.search.SearchResult; - /** *

* @@ -195,5 +196,21 @@ public class AtendimentoRequisicaoConsumoController extends GenericController internacionalizacaoList) { @@ -400,6 +401,14 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_ENDERECOS_ESTOQUE_DESVINCULADOS_MATERIAL", "Todos os materiais desta entrada tiveram seu endereço de estoque retirados!", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_ENDERECOS_ESTOQUE_PADRAO_VINCULADOS_MATERIAL", "Todos os materiais desta entrada que tinham endereços padrões neste almoxarifado foram vinculados a ele!", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.EXCLUSAO_ULTIMO_ITEM_ENTRADA", "É necessário existir ao menos um item nesta lista, para continuar exclua a entrada inteira ou adicione outro item primeiro!", dominio, modulo)); + + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.FINALIZAR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL", "A finalização de atendimento somente é permitido para requisições com a situação igual a 'Atendida parcialmente'.", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.EXCLUIR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL_FINALIZADA", "A exclusão de atendimento somente é permitido para requisições com a situação igual a 'Atendida parcialmente' ou 'Finalizada'.", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICAO", "Confirma finalização das requisições selecionados?", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_EXCLUSAO_ATENDIMENTO_REQUISICAO", "Confirma exclusão dos atendimentos selecionados?", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA", "Atendimento não permitido pois há requisições finalizadas selecionadas para atendimento. Desmarque as requisições finalizadas e clique novamente em 'Atender'.", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_FINALIZACAO_FORA_REFERENCIA", "Exclusão não permitida. Data de finalização da requisição %s fora da referência vigente.", dominio, modulo)); + } } 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 8535478..7876fa5 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 @@ -19,8 +19,8 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten // DIFINE FILTROS DE PESQUISA E CAMPOS QUE DEVEM SER APRESENTADOS NA LISTAGEM $scope.filterCriteria = { start : 1, - dir : 'desc', - sort : 'numeroRequisicao; tipoStatusRequisicao.codigo', + dir : 'asc', + sort : 'desc:numeroRequisicao;tipoStatusRequisicao.codigo', limit : 10, fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'tipoStatusRequisicao.codigo'], filters : [ {type : 'numeric-range', field : 'numeroRequisicao' } , @@ -29,8 +29,8 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten {type : 'string', field : 'unidadeRequisitante.nome' } , {type : 'string', field : 'almoxarifado.nome' } ] }; - - $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'FINALIZADA', comparison: 'ne', notFilter : true}); + + $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'DEVOLVIDA', comparison: 'ne', notFilter : true}); $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'NAO_CONCLUIDA', comparison: 'ne', notFilter : true}); }; @@ -39,7 +39,7 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten DominioRepository.findAllDominio('tipoStatusRequisicao').then(function(result) { var listaDominio = []; angular.forEach(result, function(dominio){ - if(dominio.nome != 'NAO_CONCLUIDA'){ + if(dominio.nome != 'NAO_CONCLUIDA' && dominio.nome != 'DEVOLVIDA'){ listaDominio.push(dominio) } @@ -83,7 +83,96 @@ citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'Aten }; $scope.iniciarAtendimento = function(){ - angular.element('#editAtendimentoRequisicaoConsumo').scope().prepararAtendimentoRequisicoes($scope.listaSelecionados); + + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) { + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM')); + return; + } + + var permiteAtender = true; + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) { + if(requisicaoSelecionado['tipoStatusRequisicao.codigo'] == 5){ + permiteAtender = false; + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA')); + } + }); + + if(permiteAtender){ + angular.element('#editAtendimentoRequisicaoConsumo').scope().prepararAtendimentoRequisicoes($scope.listaSelecionados); + } }; - + + function getIdsRequisicao(){ + $scope.idsSelecionados = []; + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) { + $scope.idsSelecionados.push(requisicaoSelecionado.id); + }); + } + + $scope.finalizarRequisicao = function(){ + + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) { + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM')); + return; + } + + var permiteFinalizar = true; + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) { + if(requisicaoSelecionado['tipoStatusRequisicao.codigo'] != 1){ + permiteFinalizar = false; + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.FINALIZAR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL')); + } + }); + + if(permiteFinalizar){ + $scope.$openModalConfirm({ + message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICAO'), + callback: function () { + + getIdsRequisicao(); + var atendimentoVH = {idsRequisicao : $scope.idsSelecionados, idOrganizacao : $scope.usuarioLogado.organizacao.id}; + AtendimentoRequisicaoConsumoRepository.finalizarRequisicoes(atendimentoVH).then(function(result) { + $scope.$modalConfirmInstance.dismiss('cancel'); + $scope.showAlert('success', $translate.instant('MSG.MG001'), " ", false); + $scope.recarregar(); + }); + } + }); + } + + }; + + $scope.excluirAtendimento = function(){ + + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) { + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM')); + return; + } + + var permiteExcluir = true; + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) { + if(requisicaoSelecionado['tipoStatusRequisicao.codigo'] != 1 || requisicaoSelecionado['tipoStatusRequisicao.codigo'] != 5){ + permiteExcluir = false; + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.EXCLUIR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL_FINALIZADA')); + } + }); + + if(permiteExcluir){ + $scope.$openModalConfirm({ + message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_EXCLUSAO_ATENDIMENTO_REQUISICAO'), + callback: function () { + + getIdsRequisicao(); + var atendimentoVH = {idsRequisicao : $scope.idsSelecionados, idOrganizacao : $scope.usuarioLogado.organizacao.id}; + AtendimentoRequisicaoConsumoRepository.excluirAtendimentos(atendimentoVH).then(function(result) { + $scope.$modalConfirmInstance.dismiss('cancel'); + $scope.showAlert('success', $translate.instant('MSG.MG001'), " ", false); + $scope.recarregar(); + }); + } + }); + } + + }; + }]); \ No newline at end of file diff --git a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/AtendimentoRequisicaoConsumoRepository.js b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/AtendimentoRequisicaoConsumoRepository.js index f48400b..f94cc88 100644 --- a/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/AtendimentoRequisicaoConsumoRepository.js +++ b/cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/AtendimentoRequisicaoConsumoRepository.js @@ -21,7 +21,15 @@ citApp.factory('AtendimentoRequisicaoConsumoRepository', ['RestangularAlmoxarifa this.removerAtendimentoRequisicao = function (idsRequisicaoConsumo, idOrganizacao) { return this.restangular.one(this.route +'/removerAtendimentoRequisicao').get({idsRequisicaoConsumo : idsRequisicaoConsumo, idOrganizacao : idOrganizacao}).then(); }; - + + this.finalizarRequisicoes = function(atendimentoVH){ + return restangularAlmoxarifado.all(this.route + '/finalizarRequisicoes').post(atendimentoVH).then(); + }; + + this.excluirAtendimentos = function(atendimentoVH){ + return restangularAlmoxarifado.all(this.route + '/excluirAtendimentos').post(atendimentoVH).then(); + }; + } AbstractRepository.extend(AtendimentoRequisicaoConsumoRepository); 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 4f28700..3cd1d87 100644 --- a/cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html +++ b/cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html @@ -5,29 +5,24 @@ - + + - - - - - - - -- libgit2 0.21.2