Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Painel
borderColorlightgray

Âncora
config_cota
config_cota
03.03.02 Tela de configuração de cotas

Contexto / Gatilho:

Lógica:

  • O sistema deve encaminhar o usuário para a tela de configuração de cotas, exibindo elementos visuais referenciando-se com o protótipo a seguir:

  • A tela deverá conter os seguintes elementos visuais:
  • "Configurações de Cota": Título da página
  • Corpo da página
    • "Situação": Campo de entrada do tipo radio button, com duas opções: Ativo / Inativo. Ativo por padrão.
      • A informação preenchida deve ser persistida no campo cota.idnativo, sendo (1: Ativo) e (0: Inativo)
    • "Descrição": Campo de entrada, do tipo textual, obrigatório. Limitado a 80 caracteres.
      • A informação preenchida deve ser persistida no campo cota.descricao
    • "Vigência de" e "Vigência até": campos de entrada, do tipo data, obrigatórios.
      • As informações preenchidas devem ser persistidas, respectivamente, nos campos cota.datainiciovigencia e cota.datafimvigencia
    • "Modelo de Cota": título de grupo de elementos, que contém os seguintes elementos:
      • "Defina qual será o modelo de controle de cota": Texto fixo
      • Lista de elementos, sendo:
          • Âncora
            campo_modelo_cota
            campo_modelo_cota
            Modelo de cota: Combo-box com as seguintes opções:
              • Profissional (valor persistência: usuario)
              • Produto (valor persistência: produto)
              • Filial (valor persistência: filial)
            • As opções não devem aparecer caso já tenham sido selecionada em elementos da lista
              • Por exemplo: Se no primeiro elemento, o usuário selecionar "Profissional", as opções do próximo elemento da lista serão apenas "Produto" e "Filial"
            • A informação preenchida deve ser persistida no campo cotaconfiguracao.valor, onde cotaconfiguracao.sglconfiguracao = 'modelo'
          • Âncora
            campo_selecionar_modelo
            campo_selecionar_modelo
            "Selecionar": Botão que, quando clicado, abre modal de seleção múltipla para a entidade selecionada em questão
            • O botão somente deve ser visível quando houver Modelo de cota selecionado
            • Quando confirmadas as seleções da modal, o sistema deverá exibir texto `${contagem de registros selecionados} registros selecionados` ao lado do botão "Selecionar"
              • Caso nenhum registro estiver selecionado, exibir "Nenhum registro selecionado"
            • As opções selecionadas deverão ser persistidas na tabela cotaconfigvinculos, sendo:

              Sem Formato
              {
              	"idcotaconfiguracao": identificador da configuração do tipo sglconfiguracao="modelo" em questão,
              	"idusuario": id do usuário selecionado, se o modelo selecionado for "Profissional"
               	"idproduto": id do produto selecionado, se o modelo selecionado for "Produto" 
               	"idfilial": id do local referente à filial selecionada, se o modelo selecionado for "Filial" 
              }
          • Remover modelo: Ícone que, quando clicado, deve remover o item da lista de modelos selecionados
            • O ícone não deve aparecer para o primeiro elemento da lista
        • O último elemento da lista deve ser sempre um registro cujo elemento [Modelo de cota] não tenha sido selecionado.
          • Assim que o modelo for selecionado, deve ser inserido mais um elemento vazio ao fim da lista, para garantir a regra acima.
    • "Agrupamentos de cota": título de grupo de elementos, que contém os seguintes elementos:
      • "Defina sob quais perspectivas a visualização/manutenção de cotas será feito": Texto fixo
      • Lista de elementos, sendo:
        • Âncora
          campo_agrup_cota
          campo_agrup_cota
          Agrupamento de cota: Combo-box com as seguintes opções:
            • ${Lista de modelos selecionados no campo Modelo de cota
            • Caso a entidade Profissional tenha sido selecionada na lista de modelos selecionados no campo Modelo de cota, o sistema deve exibir a opção:
              • Supervisor (valor persistência: supervisor)
              • Filial (caso não esteja na lista de modelos selecionados no campo Modelo de cota) (valor persistência: filial)
            • Caso a entidade Produto sido selecionada na lista de modelos selecionados no campo Modelo de cota, o sistema deve exibir a opção:
              • Filial (caso não esteja na lista de modelos selecionados no campo Modelo de cota) (valor persistência: filial)
          • A informação preenchida no campo deve ser persistida na tabela cotaconfiguracao, onde:

            Sem Formato
            {
            	idcota: registro de cota referente ao contexto da tela
            	sglconfiguracao: 'agrup'
            	valor: valor referente ao campo selecionado
            }
        • "Selecionar vínculos": botão que, quando clicado, deve abrir modal para seleção de opções de vínculos.
          • A modal de seleção de vínculos deve exibir os seguintes elementos:
            • "Vínculos": título da modal
            • "Pesquisa rápida": Campo de entrada textual, para pesquisar sobre a descrição dos Enums de vínculos que serão exibidos
            • Grid de seleção múltipla, contendo as seguintes colunas:
              • Check-box de seleção dos registros
              • "Descrição": Coluna que deverá exibir a descrição dos Enums de vínculos que serão exibidos
            • Botões de ação, sendo:
              • Cancelar: quando clicado, fecha a modal
              • Confirmar: quando clicado, grava em memória os objetos para persistência na tabela cotaconfigvinculos, onde:

                Sem Formato
                {
                	idcotaconfiguracao: referência da configuração de agrupamento referente à modal
                	sgllogicavinculo: valor do Enum do registro selecionado
                }
          • O botão somente deve ser exibido quando o campo Agrupamento de cota estiver selecionado com a opção "Filial", e quando aberta, deverá exibir os seguintes Enums:

            Sem Formato
            { Descrição: "Filtrar somente filiais vinculadas aos produtos", valor para persistência: produtofilial } // mostrado apenas quando produto foi selecionado no campo de Modelos de cota
            { Descrição: "Filtrar somente filiais vinculadas aos profissionais", valor para persistência: usuariofilial } // mostrado apenas quando usuario foi selecionado no campo de Modelos de cota
  • Botões de ação, sendo:
    • "Gravar": persiste os dados nas tabelas cota, cotaconfig e cotaconfigvinculos, conforme descrito nas regras acima.
    • "Finalizar": 
      • Além de persistir os dados nas tabelas cota, cotaconfig e cotaconfigvinculos, conforme descrito nas regras acima, 
        • O sistema deve realizar a persistência da tabela controlecota, de forma a criar os registros de controle conforme os modelos que foram selecionados.


          • Para isso, o sistema deve realizar um cross join de todas as seleções de modelos do campo Selecionar, como exemplifica a seguinte sentença SQL:

            Sem Formato
            Nesse exemplo, consideram-se as entidades produto e usuario como modelos selecionados
            
            CONSULTA_1
            /* 
            select p.idproduto, p.idusuario, null as idlocalfilial from produto p
            cross join usuario u
            where p.idproduto in (:lista_produtos_vinculados) 
            and u.idusuario in (:lista_usuarios_vinculados)
            */
          • Com as combinações das entidades em memória, o sistema deve inserir registros na tabela controlecota, como exemplifica a seguinte sentença SQL:

            Sem Formato
            insert into controlecota (idnativo,saldodisponivel,saldoinicio,idcota,idusuario,idproduto,idlocalfilial)
            values (
            	select 1,0,0,:identificador_cota_contexto, idusuario, idproduto, idlocalfilial from CONSULTA_1
            )
          • Visto que o processo pode levar um tempo considerável, é importante existir um feedback visual, como barra de progresso, ou no mínino um GIF de carregando com a mensagem: "Por favor, aguarde. Esse processo pode levar alguns minutos"
    • "Voltar": retorna à página anterior

...

Painel
borderColorlightgray

Âncora
alterar_controle
alterar_controle
03.05 Função de alterar controles

Contexto / Gatilho:

Lógica:

  • O sistema deve abrir modal referenciando-se com o protótipo a seguir:

  • A modal deve conter os seguintes elementos visuais:
  • "Alteração de controles de cota": título da modal
  • Campo radio button, com duas opções:
      • "Adicionar controles"
      • "Inativar controles"
    • Ao trocar a opção, a seleção do campo de Modelos de controle deverá ser limpa.
  • Separador horizontal
  • "Selectione os registros de controles que deseja ${"Adicionar / Inativar" dependendo da opção do radio button selecionada}": Texto fixo
  • Modelos de controle: Combobox com os modelos podendo ser consultados através da consulta a seguir

    Sem Formato
    select valor from cotaconfiguracao where sglconfiguracao = "modelo"


      • Se o resultado for 'usuario', exibir opção "Profissional"
      • Se o resultado for 'produto', exibir opção "Produto"
      • Se o resultado for 'filial', exibir opção "Filial"
    • Ao lado do campo combobox, deve haver botão "Selecione" que, quando clicado, abre modal de seleção múltipla para a entidade selecionada em questão
      • Caso o campo de modelo seja selecionado como "Filial"
        • Caso o campo radio button selecionado for "Adicionar controles", devem ser somente filiais ativas que não pertencem à cota de contexto.

          Sem Formato
          select idlocal from local where idnativo = 1 and idlocal not in (select idlocalfilial from controlecota where idcota = ?) 
        • Caso o campo radio button selecionado for "Inativar controles", devem ser listados somente filiais ativas que pertencem à cota de contexto

          Sem Formato
          select idlocalfilial from controlecota where idcota = ?
      • Caso o campo de modelo seja selecionado como "Profissional"
        • Caso o campo radio button selecionado for "Adicionar controles", devem ser somente profissionais ativos que não pertencem à cota de contexto.

          Sem Formato
          select idusuario from usuario where idnativo = 1 and idusuario not in (select idusuario from controlecota where idcota = ?) 
        • Caso o campo radio button selecionado for "Inativar controles", devem ser listados somente profissionais ativos que pertencem à cota de contexto

          Sem Formato
          select idusuario from controlecota where idcota = ?
      • Caso o campo de modelo seja selecionado como "Filial"
        • Caso o campo radio button selecionado for "Adicionar controles", devem ser somente produtos ativos que não pertencem à cota de contexto.

          Sem Formato
          select idproduto from produto where idnativo = 1 and idproduto not in (select idproduto from controlecota where idcota = ?) 
        • Caso o campo radio button selecionado for "Inativar controles", devem ser listados somente produtos ativos que pertencem à cota de contexto

          Sem Formato
          select idproduto from controlecota where idcota = ?
      • Quando confirmadas as seleções da modal, o sistema deverá exibir texto `${contagem de registros selecionados} registros selecionados` ao lado do botão "Selecionar"
        • Caso nenhum registro estiver selecionado, exibir "Nenhum registro selecionado"
  • Botões de ação
    • "Cancelar": Fecha a modal, quando clicado
    • "Confirmar": Quando clicado, 
      • Caso o campo radio button selecionado for "Adicionar controles"
        • O sistema deverá realizar a persistência dos controles de cota selecionados, da seguinte forma:

          • Realizar cruzamento entre os registros do modelo a ser adicionado, com os registros de outros modelos ativos presentes na cota

          • Adicionar novas linhas de controle para os novos registros selecionados.

            Sem Formato
            /*
            Exemplo de adição de controles de cota, selecionando 5 novos usuários
            O sistema deverá adicionar registro de todos os produtos para estes 5 novos profissionais
            
            CONSULTA_A
            select idusuario,idproduto, NULL AS IDLOCALFILIAL from ${lista_usuarios_selecionados}
            cross join produto p
            where p.idproduto in (select idproduto from controlecota where idcota = ? and idnativo = 1)
            
            insert into controlecota (idnativo,saldodisponivel,saldoinicio,idcota,idusuario,idproduto,idlocalfilial)
            values (
            	select 1,0,0,:identificador_cota_contexto, CONSULTA_A.idusuario, CONSULTA_A.idproduto, CONSULTA_A.idlocalfilial from CONSULTA_A
            )
            
            */
      • Caso o campo radio button selecionado for "Inativar controles"
        • O sistema deverá realizar a atualização dos controles de cota selecionados, da seguinte forma:

          • Realizar cruzamento entre os registros do modelo a ser adicionado, com os registros de outros modelos ativos presentes na cota

          • Atualizar para inativo as linhas de controle para os registros de modelo selecionado.

            Sem Formato
            /*
            Exemplo de inativação de controles de cota, selecionando 5 produtos
            O sistema deverá atualizar todos os registros para estes 5 produtos
            
            update controlecota set idnativo = 0 where idproduto in (:lista_produtos_selecionados)
            
            */
      • Visto que o processo pode levar um tempo considerável, é importante existir um feedback visual, como barra de progresso, ou no mínino um GIF de carregando com a mensagem: "Por favor, aguarde. Esse processo pode levar alguns minutos"
Painel
borderColorlightgray

Âncora
transferir_saldo
transferir_saldo
03.05 Função de transferência de saldo de cota

Contexto / Gatilho:

  • No ambiente Web, na tela de controles de cota, ao clicar sobre o botão "Transferir saldo"

Lógica:

  • O sistema deve abrir modal referenciando-se com o protótipo a seguir:

  • A modal deve conter os seguintes elementos visuais:
  • "Transferência de saldo de cota": título da modal
  • "${Modelo 1} - ${Modelo 2} - ${Modelo 3}": Descrição dos modelos da cota original, concatenados.
  • "Saldo disponível para transferência: ${controlecota.saldodisponivel}": Texto fixo, buscando campo de saldo disponível relacionado à cota original
  • "Saldo a transferir": campo de input numérico editável
  • Linha horizontal
  • "Distribuição de saldo": Campos iguais ao agrupamento Distribuição de saldo
  • "Filtro de controles de cota de destino": Campos iguais ao agrupamento Filtro de controles de cota de destino
  • Botões de ação: Elementos iguais à seção de Botões de ação da função de alterar saldo
    • Para a lógica do botão Confirmar, o sistema deve executar a seguinte ação:
      • Verificar se o valor do campo Saldo a transferir não supera o valor disponível a ser transferido. Caso superar, o sistema deverá realizar rollback + mensagem: "Não há saldo disponível de ${Saldo a transferir} na conta de origem. O saldo disponível é ${controlecota.saldodisponivel}" 
      • Criar um débito de saldo na conta de origem, aproveitando a lógica de débito descrita na função de alterar saldo, cujo valor debitado é ${saldo a transferir}
      • Criar uma adição de saldo de cota nas contas filtradas de destino, aproveitando a lógica de adição descrita na função de alterar saldo, respeitando o modelo de distribuição selecionado, cujo valor é ${saldo a transferir}