Skip to main content

Listagem de grupos de unidades

Documentação funcional completa da funcionalidade Listagem de grupos de unidades (Criar Grupos / Grupos de Unidades) do portal MM-PACS: listagem, cadastro, edição, exclusão, ativar/inativar unidades em massa e exportação.


Índice


Visão geral

A funcionalidade Criar Grupos permite:

AçãoDescrição
ListarVer grupos de unidades com filtros e paginação.
AdicionarCriar novo grupo e opcionalmente associar uma unidade ao grupo.
EditarAlterar dados do grupo (descrição, PACS, storage, congelamento, links etc.).
ExcluirExcluir grupo (bloqueado se houver unidades vinculadas).
Ativar todas as unidadesAtivar em massa todas as unidades do grupo.
Inativar todas as unidadesInativar em massa todas as unidades do grupo.
ExportarExportar listagem em XLSX.

O modal de cadastro/edição é reutilizado também na tela Listar Franquias por Grupo (listarFranquiasGrupoCtrl).


Rota e acesso

ItemValor
State (UI-Router)gruposEmpresas
URL/gruposEmpresas
Arquivo de rotaapp/core/config.route.js
Templateviews/gruposEmpresas/gruposEmpresas.html
ControllergruposEmpresasCtrl (definido no template via ng-controller)

A rota não declara controller no config.route.js; o controller é atribuído na view com ng-controller="gruposEmpresasCtrl".


Tela de listagem (gruposEmpresas)

View

AtributoValor
Arquivoviews/gruposEmpresas/gruposEmpresas.html
ControllergruposEmpresasCtrl

Estrutura da tela

  • Cabeçalho: título "Listagem de grupos de unidades", botão Voltar (btn-voltar), botão Adicionar, ícone Exportar.
  • Tabela: colunas com filtro na primeira linha e dados na segunda (ng-repeat em frontTable).

btn adicionar, exportar, voltar

Colunas e filtros

Colunang-model do filtroCampo no item
Descriçãofiltro.descricaoitem.descricao
Tamanho de storagefiltro.storage_sizeitem.storage_size
Descrição storagefiltro.storage_descriptionitem.storage_description
Congelamento intermediário (GB)filtro.congelamento_intermediario_gbitem.congelamento_intermediario_gb
Congelamento frio (GB)filtro.congelamento_frio_gbitem.congelamento_frio_gb
URL PACSfiltro.url_pacs_externoitem.url_pacs_externo
Link Androidfiltro.app_entrega_androiditem.app_entrega_android
Link iOSfiltro.app_entrega_iositem.app_entrega_ios
AçõesBotões: Ativar todas, Inativar todas, Editar, Excluir

Paginação

  • Texto "Mostrando X a Y de Z registros".
  • uib-pagination: página atual em filtro.pagina, total em paginacao.total, itens por página em filtro.total_registros.
  • Select de registros por página: registosPorPagina (enum).

Tabela de grupos

IDs relevantes (para testes/Cypress)

  • btn-grupo-empresas-voltar, btn-grupo-empresas-adicionar, btn-grupo-empresas-exportar
  • btn-grupo-empresas-filtrar
  • input-grupo-empresas-descricao-filtro, input-grupo-empresas-tamanho-storage-filtro, etc.
  • btn-grupo-empresas-ativar-{{item.id}}, btn-grupo-empresas-inativar-{{item.id}}, btn-grupo-empresas-editar-{{item.id}}, btn-grupo-empresas-excluir-{{item.id}}
  • td-grupo-empresas-descricao-{{item.id}}, td-grupo-empresas-congelamento-intermediario-gb-{{item.id}}, etc.

View

AtributoValor
Arquivoviews/modais/gruposEmpresasForm.html
ControllergruposEmpresasFormCtrl
AcessoVia $mdDialog (templateUrl: pathFile.gruposEmpresasForm)

Estrutura do modal

  • Toolbar: título "Dados do Grupo de Unidades", botão fechar.
  • Formulário (name="grupoEmpresaForm"):
    • Nome (obrigatório) – gruposEmpresas.descricao
    • Unidade à associar (somente ao adicionar) – select-unico com empresasUsuarioGrupoEmpresa, ng-model="empresa"
    • Link AndroidgruposEmpresas.app_entrega_android
    • Link iOSgruposEmpresas.app_entrega_ios
    • Congelamento intermediário (GB)gruposEmpresas.congelamento_intermediario_gb (number, min 0)
    • Congelamento frio (GB)gruposEmpresas.congelamento_frio_gb (number, min 0)
    • Tamanho de storage (GB)gruposEmpresas.storage_size (number, min 0)
    • Descrição storagegruposEmpresas.storage_description
    • URL PACSselect-unico com selectPacsExterno, ng-model="gruposEmpresas.pacs_externo" + link "Limpar" (limpaPacs())
  • Ações: Cancelar, Salvar (desabilitado se grupoEmpresaForm.$invalid).

Validação no controller

  • storage_size deve ser null ou entre 0 e 999999; caso contrário exibe MSG_TAMANHO_STORAGE_INVALIDO.

Modal de grupo

IDs relevantes

  • btn-dados-grupo-unidade-fechar, btn-dados-grupo-unidade-cancelar, btn-dados-grupo-unidade-salvar
  • btn-modal-limpar-grupo-pacs

Controller da listagem (gruposEmpresasCtrl)

Arquivo e dependências

AtributoValor
Arquivoapp/controllers/gruposEmpresasCtrl.js
NomegruposEmpresasCtrl
Dependências$scope, gruposEmpresasHttpService, Notification, $filter, gruposEmpresasModel, pathFile, $mdDialog, enums, permissionUtilService, storageService, empresaHttpService, exportarRelatorioService

Escopo principal

VariávelDescrição
frontTableArray de itens exibidos na tabela (saída de gruposEmpresasModel.frontTable).
pathFileObjeto com caminhos de templates (ex.: gruposEmpresasForm).
usuarioUsuário logado (storageService.getUser()).
registosPorPaginaOpções de itens por página.
filtroObjeto de filtro e paginação (usado em buscarGruposEmpresas).
paginacaoDados de paginação retornados pela API.

Funções

FunçãoDescrição
buscarGruposEmpresas(filtro)Monta payload com gruposEmpresasModel.filtro(filtro), chama gruposEmpresasHttpService.buscarGruposEmpresas, atualiza frontTable e paginacao.
adicionar(ev, gruposEmpresas)Abre modal com gruposEmpresasFormCtrl, pathFile.gruposEmpresasForm, locals: { gruposEmpresas, usuarioId }. No then do dialog, chama empresaHttpService.atualizaGrupoEmpresa com empresa_id e gruposEmpresas_id e recarrega a listagem.
editar(ev, gruposEmpresas)Abre o mesmo modal em modo edição com locals: { gruposEmpresas }. Ao fechar com sucesso, recarrega a listagem.
exportarGrupos(filtro)Usa gruposEmpresasModel.filtro com total_registros: 5000, chama gruposEmpresasHttpService.exportarGrupos, depois exportarRelatorioService.exportarRelatorio (XLSX).
excluir(ev, dados)Confirma com $mdDialog.confirm. Chama gruposEmpresasHttpService.excluirGrupoEmpresa(dados.id). Em caso de grupo com empresas, exibe GRUPO_POSSUI_EMPRESAS.
ativarTodasUnidades(ev, grupo)Confirma e chama gruposEmpresasHttpService.ativarTodasUnidades(grupo.id).
inativarTodasUnidades(ev, grupo)Confirma e chama gruposEmpresasHttpService.inativarTodasUnidades(grupo.id).

Controller do modal (gruposEmpresasFormCtrl)

Arquivo e dependências

AtributoValor
Arquivoapp/controllers/modais/gruposEmpresasFormCtrl.js
NomegruposEmpresasFormCtrl
Dependências$scope, $mdDialog, locals, gruposEmpresasHttpService, $filter, gruposEmpresasModel, Notification

Locals (injetados ao abrir o modal)

LocalUso
gruposEmpresasObjeto do grupo ao editar; undefined ao adicionar.
usuarioIdID do usuário ao adicionar (para o select de unidade à associar).

Escopo

VariávelDescrição
is_edittrue se for edição (existir locals.gruposEmpresas).
gruposEmpresasObjeto do formulário: ao editar, preenchido com gruposEmpresasModel.front(_gruposEmpresas); ao adicionar, não inicializado (formulário novo).
empresa{ itemSelect: null } para o select "Unidade à associar".
usuarioIdRepasse de locals.usuarioId ao adicionar.

Funções

FunçãoDescrição
cancel()Fecha o dialog com $mdDialog.cancel().
limpaPacs()Zera gruposEmpresas.pacs_externo (array vazio, itemSelect null).
salvar(gruposEmpresas)Valida storage_size (0–999999 ou null). Monta payload com gruposEmpresasModel.back(gruposEmpresas). Se is_edit: alterarGruposEmpresas e $mdDialog.hide(). Se novo: adicionarGruposEmpresas, depois $mdDialog.hide({ gruposEmpresas_id, empresa_id }) para o fluxo de associar unidade.

Inicialização ao editar

  • Se existir id_pacs e url_pacs_externo, monta gruposEmpresas.pacs_externo no formato do select (array + itemSelect) para exibir o PACS selecionado.

Model (gruposEmpresasModel)

Arquivo

app/domain/models/gruposEmpresasModel.js — factory gruposEmpresasModel.

Funções expostas

FunçãoUsoDescrição
filtro(filtro)Listagem e exportaçãoRetorna objeto { filtro: { ... }, paginacao: { pagina, total_registros } }. Campos do filtro: is_ativo, descricao, app_entrega_android, app_entrega_ios, id_pacs, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, url_pacs_externo.
frontTable(dados)ListagemRecebe dados.lista e retorna array de itens com: id, descricao, app_entrega_android, app_entrega_ios, id_pacs, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, url_pacs_externo (de pacs_externo.url_pacs_externo quando existir).
frontEmpresaTable(dados)Dropdown em outras telasRetorna lista com opções "Todos" e "Sem grupo" + itens com id e descricao. Usado em relatórios e selects de grupo.
front(dados)Modal (edição)Converte um objeto grupo da API para o formato do formulário: inclui todos os campos do grupo (incl. congelamento_intermediario_gb, congelamento_frio_gb, storage_size, storage_description, url_pacs_externo, id_pacs).
back(dados)Modal (salvar)Converte o objeto do formulário para o payload da API: { gruposEmpresas: { id, descricao, comentario, app_entrega_android, app_entrega_ios, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, id_pacs } }. O id_pacs vem de dados.pacs_externo.itemSelect quando existir.

Serviço HTTP (gruposEmpresasHttpService)

Arquivo

app/services/http/gruposEmpresasHttpService.js — factory gruposEmpresasHttpService. Dependências: $http, config, storageService.

Endpoints

Método do factoryMétodo HTTPURLDescrição
adicionarGruposEmpresas(dados)POST/gruposEmpresasCria grupo.
getGruposEmpresas(id)GET/gruposEmpresas/:idObtém um grupo.
alterarGruposEmpresas(dados)PUT/gruposEmpresasAtualiza grupo.
buscarGruposEmpresas(filtro)POST/gruposEmpresas/listaListagem paginada/filtrada.
excluirGrupoEmpresa(id)DELETE/gruposEmpresas/:idExclui grupo.
exportarGrupos(filtro)POST/gruposEmpresas/exportarExportação (responseType: blob).
ativarTodasUnidades(grupo_id)POST/gruposEmpresas/ativarUnidades/:grupo_idAtiva todas as unidades do grupo.
inativarTodasUnidades(grupo_id)POST/gruposEmpresas/inativarUnidades/:grupo_idInativa todas as unidades do grupo.

Todas as requisições usam header token: storageService.getToken(). POST/PUT usam Content-Type: application/json.


Configuração (pathFile)

No app/config/config.js, o objeto de paths (pathFile) inclui:

ChaveValor
gruposEmpresasForm'views/modais/gruposEmpresasForm.html'

Usado em gruposEmpresasCtrl e em listarFranquiasGrupoCtrl para abrir o modal.


Fluxos de uso

Adicionar grupo (e associar unidade)

  1. Usuário clica em Adicionar na tela de listagem.

Botão adicionar

  1. gruposEmpresasCtrl.adicionar(ev, item) abre o modal com locals: { gruposEmpresas: item, usuarioId }.

Modal de grupo

  1. Modal abre em modo “novo” (is_edit false); usuário preenche nome e demais campos e escolhe Unidade à associar (select).

Modal unidades

  1. Ao clicar Salvar, gruposEmpresasFormCtrl.salvar chama adicionarGruposEmpresas; no then, $mdDialog.hide({ gruposEmpresas_id, empresa_id }).

Criar grupo

  1. No gruposEmpresasCtrl, o then do dialog chama empresaHttpService.atualizaGrupoEmpresa({ id: empresa_id, gruposEmpresas_id }) e depois buscarGruposEmpresas().

Listagem

Editar grupo

  1. Usuário clica em Editar na linha do grupo.

botão editar

  1. gruposEmpresasCtrl.editar(ev, item) abre o modal com locals: { gruposEmpresas: item }.
  2. Controller do modal preenche gruposEmpresas com gruposEmpresasModel.front(item) e, se houver PACS, monta pacs_externo para o select.

modal editar

  1. Usuário altera e clica Salvar; alterarGruposEmpresas é chamado e o dialog faz hide().
  2. Na listagem, o then do dialog chama buscarGruposEmpresas().

put

Excluir / Ativar / Inativar

  • Excluir: botão vermelho na coluna da tabela

btn excluir

confirmação → excluirGrupoEmpresa(id) → em sucesso recarrega lista; se grupo tiver empresas, API pode retornar status e front exibe GRUPO_POSSUI_EMPRESAS.

modal confirmação

  • Ativar todas / Inativar todas: confirmação → ativarTodasUnidades(grupo.id) ou inativarTodasUnidades(grupo.id) → notificação de sucesso ou tratamento de erro (incl. 400 com mensagem).

botões ativar/desativar todos


Payload e API

Listagem (POST /gruposEmpresas/lista)

  • Envio: objeto retornado por gruposEmpresasModel.filtro(filtro) (contém filtro e paginacao).
  • Resposta esperada: estrutura com lista (array de grupos) e paginacao (ex.: from, to, total). Cada item da lista pode ter pacs_externo.url_pacs_externo para exibição.

Criar (POST /gruposEmpresas)

  • Envio: { gruposEmpresas: { descricao, comentario, app_entrega_android, app_entrega_ios, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, id_pacs } }.
  • Resposta esperada: corpo com grupoEmpresa.id (usado no fluxo de associar unidade).

Alterar (PUT /gruposEmpresas)

  • Envio: mesmo formato, com gruposEmpresas.id preenchido.

Exportar (POST /gruposEmpresas/exportar)

  • Envio: mesmo formato de filtro da listagem (geralmente com paginacao.total_registros alto).
  • Resposta: blob (arquivo XLSX).

Componentes alterados (referência)

TipoCaminhoDescrição
Viewviews/gruposEmpresas/gruposEmpresas.htmlTela de listagem, filtros, tabela, ações e paginação.
Viewviews/modais/gruposEmpresasForm.htmlModal de dados do grupo (cadastro/edição).
Controllerapp/controllers/gruposEmpresasCtrl.jsListagem, abrir modal, exportar, excluir, ativar/inativar.
Controllerapp/controllers/modais/gruposEmpresasFormCtrl.jsFormulário do modal, salvar (criar/editar), validar storage.
Modelapp/domain/models/gruposEmpresasModel.jsfiltro, frontTable, frontEmpresaTable, front, back.
Serviceapp/services/http/gruposEmpresasHttpService.jsChamadas HTTP à API de grupos.
Configapp/config/config.jspathFile.gruposEmpresasForm.
Routeapp/core/config.route.jsState gruposEmpresas, URL /gruposEmpresas.

Uso do modal em outros contextos

  • listarFranquiasGrupoCtrl (app/controllers/viewer/listarFranquiasGrupoCtrl.js): usa o mesmo gruposEmpresasFormCtrl e pathFile.gruposEmpresasForm para adicionar e editar grupos na tela de franquias por grupo.

i18n

Chaves utilizadas nas views e controllers desta funcionalidade (ex.: pt-br.json):

ChaveUso
LISTAGEM_GRUPOS_UNIDADESTítulo da página.
DADOS_GRUPOS_UNIDADESTítulo do modal.
ADDBotão adicionar.
EXPORTAR_GRUPOS_UNIDADESTooltip exportar.
DESCRICAOColuna/filtro descrição.
TAMANHO_DE_STORAGEColuna tamanho storage.
DESCRICAO_STORAGEColuna e label descrição storage.
CONGELAMENTO_INTERMEDIARIO_GBColuna e label congelamento intermediário.
CONGELAMENTO_FRIO_GBColuna e label congelamento frio.
URL_PACSColuna e label URL PACS.
LINK_ANDROID / LINK_IOSColunas e labels.
ACOESCabeçalho coluna ações.
FILTRARBotão filtrar.
NOMELabel nome no modal.
UNIDADE_ASSOCIARLabel unidade à associar.
TAMANHO_DE_STORAGE_GBLabel tamanho storage (GB) no modal.
CANCELAR / SALVARBotões do modal.
LIMPARLink limpar PACS.
EDITAR_GRUPOTooltip editar.
EXCLUIR_GRUPO_UNIDADEBotão e título do confirm excluir.
ALERT_EXCLUIR_GRUPO_UNIDADEMensagem do confirm excluir.
GRUPO_POSSUI_EMPRESASErro ao excluir grupo com empresas.
ATIVAR_TODAS_EMPRESAS / INATIVAR_TODAS_EMPRESASBotões e títulos dos confirms.
ALERT_ATIVAR_GRUPO_UNIDADE / ALERT_INATIVAR_GRUPO_UNIDADEMensagens dos confirms.
MSG_ATIVAR_UNIDADES_SUCESSO / MSG_INATIVAR_UNIDADES_SUCESSONotificações de sucesso.
RELATORIO_GRUPOSNome do arquivo de exportação.
MSG_TAMANHO_STORAGE_INVALIDOValidação storage no modal.
MOSTRANDO_DE, A_ACENTO, DE, REGISTROSTextos de paginação.

Âncoras de referência

ÂncoraConteúdo
#visão-geralResumo da funcionalidade e ações.
#rota-e-acessoState, URL e template.
#tela-de-listagem-gruposempresasView da listagem, colunas, filtros, IDs.
#modal-de-formulário-gruposempresasformView do modal e campos.
#controller-da-listagem-gruposempresasctrlFunções e escopo do controller da listagem.
#controller-do-modal-gruposempresasformctrlFunções e escopo do controller do modal.
#model-gruposempresasmodelFunções do model (filtro, front, back, etc.).
#serviço-http-gruposempresashttpserviceEndpoints da API.
#configuração-pathfilepathFile.gruposEmpresasForm.
#fluxos-de-usoAdicionar, editar, excluir, ativar/inativar.
#payload-e-apiFormato de requisições e respostas.
#componentes-alterados-referênciaTabela de arquivos.
#i18nChaves de tradução.

Written by: Fabiane Heckmann

Last modified:

© 2026 Mobilemed. Todos os direitos reservados.