Á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"
          • 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: "Finalizando cadastro de cota. Por favor, aguarde. Esse processo pode levar alguns minutos"
    • "Voltar": retorna à página anterior

...

Painel
borderColorlightgray

Âncora
alterar_saldo
alterar_saldo
03.04 Função de alterar saldo

Contexto / Gatilho:

  • No ambiente Web,
    • (Gatilho 1) Na tela de controles de cota, ao clicar sobre o botão "Alterar saldos", passando como contexto os modelos filtrados pela pesquisa.
    • (Gatilho 2) Na tela de agrupamentos de cota, ao clicar sobre o botão "Alterar saldos", passando como contexto o registro da entidade agrupadora

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 saldo de cota": título da modal
  • Campo radio button, com duas opções:
      • "Adicionar saldo"
      • "Deduzir saldo"
    • Ao lado das opções, deve ser exibido campo input numérico, editável
  • Separador horizontal
  • "Distribuição de saldo": título de grupo de elementos
    • "Modelo de distribuição": Campo de opções selecionáveis (combo-box), mostrando as opções:
        • "Distribuir igualmente"
        • "Dividir proporcionalmente ao valor de pedidos anteriores"
      • "Dias de histórico: input numérico, aceitando valores inteiros positivos, editável
        • O campo somente deve ser exibido, caso o campo "Modelo de distribuição" estiver marcado com a opção "Dividir proporcionalmente ao valor de pedidos anteriores"
        • O valor preenchido no campo deve ser persistido na sessão, de forma que ao abrir a modal novamente, o campo venha previamente preenchido.
      • "Saldo mínimo": input numérico editável
        • O campo somente deve ser exibido, caso o campo "Modelo de distribuição" estiver marcado com a opção "Dividir proporcionalmente ao valor de pedidos anteriores"
        • O valor preenchido no campo deve ser persistido na sessão, de forma que ao abrir a modal novamente, o campo venha previamente preenchido.
  • "Filtro de controles de cota de destino": título de grupo de elementos
    • "Profissional": Botão que, quando clicado, abre modal de seleção múltipla para a entidade selecionada em questão (usuario)
      • Somente devem ser exibidos usuários que pertencem à cota do contexto

        Sem Formato
        select idusuario from controlecota where idcota = ?
      • O botão somente deve ser visível quando a entidade estiver selecionada no campo Modelo de cota
      • 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. Aplicável a todos"
    • "Produto": Botão que, quando clicado, abre modal de seleção múltipla para a entidade selecionada em questão (produto)
      • Somente devem ser exibidos produtos que pertencem à cota do contexto

        Sem Formato
        select idproduto from controlecota where idcota = ?
      • O botão somente deve ser visível quando a entidade estiver selecionada no campo Modelo de cota
      • 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. Aplicável a todos"
    • "Filial": Botão que, quando clicado, abre modal de seleção múltipla para a entidade selecionada em questão (local, do tipo filial)
      • Somente devem ser exibidas filiais que pertencem à cota do contexto

        Sem Formato
        select idlocalfilial from controlecota where idcota = ?
      • O botão somente deve ser visível quando a entidade estiver selecionada no campo Modelo de cota
      • 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. Aplicável a todos"
  • Botões de ação
    • "Cancelar": Fecha a modal
    • "Confirmar": Quando clicado, o sistema deve:
      • Verificar se o campo de input referente ao campo "Adicionar saldo" / "Deduzir saldo" selecionado está preenchido.
        • Caso não estiver, rollback + mensagem: Preencha o campo ${"Adicionar saldo" ou "Deduzir saldo" dependendo do que  estiver selecionado}
      • Verificar se os campos "Dias de histórico" e "Saldo mínimo" estiverem visíveis e não preenchidos
        • Caso verdadeiro, rollback + mensagem: Preencha o campo ${campo não preenchido em questão}
      • Validar se todos os controles de cotas ativas filtradas pelos filtros de controles de cota de destino receberão o montante definido no campo "Saldo mínimo"

        Sem Formato
        ${Saldo a ser distribuido igualmente}
        /* select ${Valor do saldo adicionado} / count(*) from controlecota 
        where (idusuario in (:filtro_usuario) or (:filtro_usuario) is null) 
        and  (idproduto in (:filtro_produto) or (:filtro_produto) is null)  
        and  (idlocalfilial in (:filtro_filial) or (:filtro_filial) is null) */
        
        Verificar se ${Saldo a ser distribuido, se igualmente} > ${Valor do saldo mínimo}
        • Se falso, rollback + mensagem: "O saldo adicionado não é suficiente para respeitar o saldo mínimo definido"
      • Se "Modelo de distribuição" = "Distribuir igualmente"
        • Se o campo radio button estiver marcado como "Adicionar saldo"
          • O sistema deverá adicionar um movimento de cota igual positivo na controlecotamovimento para todos os controles de cota filtrados pelos filtros de controles de cota de destino e somá-lo ao saldo do controle de cota, da seguinte forma:

            Sem Formato
            Por exemplo, se filtrados usuários e produtos na modal
            
            SET1: set de controlecotas a serem atualizadas
            	/* select idcontrolecota from controlecota where idproduto in (?) and idusuario in (?) and idnativo = 1
            
            Para cada registro:
            /* insert into controlecotamovimento ... values
            {
            	idprofissional: identificador da entidade do campo "Profissional"
            	idproduto: identificador da entidade do campo "Produto"
            	quantidade: ${Saldo a ser distribuido igualmente}
            	observação: "Movimento criado e processado manualmente pela aplicação",
            	sglorigem: 'WEB'
            	idnativo: 1
            	idnprocessado: 1
            	data: current_date
            	datamovimento:current_date
            }
            */
            
            /*
            update controlecota set saldodisponivel = saldodisponivel + ${controlecotamovimento.quantidade}
            */


            • O sistema deverá retornar feedback visual toast (Success): "Operação realizada com sucesso"
        • Se o campo radio button estiver marcado como "Deduzir saldo"
          • O sistema deverá adicionar um movimento de cota igual negativo na controlecotamovimento para todos os controles de cota filtrados pelos filtros de controles de cota de destino e somá-lo ao saldo do controle de cota
            • Caso o saldo disponível pelo controle de cota não for suficiente para ser deduzido integralmente, o sistema deve retornar o valor que não pôde ser deduzido, com a mensagem pop up:
              • "Dedução de ${${Valor do campo deduzir saldo } - ${Valor que não pôde ser deduzido}} foi realizada com sucesso. Não foi possível deduzir  ${Valor que não pôde ser deduzido} do saldo de cota, devido à saldos disponíveis insuficientes" Opções "OK" e  "Deduzir restante"
              • Ao clicar em ok, fechar a modal
              • Ao clicar em "Deduzir restante", aplicar  ${Valor que não pôde ser deduzido} no campo "Deduzir saldo"
          • Sem Formato
            Por exemplo, se filtrados usuários e produtos na modal
            
            SET1: set de controlecotas a serem deduzidas 
            	/* select idcontrolecota from controlecota where idproduto in (?) and idusuario in (?) and idnativo = 1 and saldodisponivel > 0
            
            Para cada registro:
            ${Saldo a ser deduzido} = controlecota.saldodisponivel >= ${Saldo a ser distribuido igualmente} ? ${Saldo a ser distribuido igualmente} : controlecota.saldodisponivel
            -- Se controlecota.saldodisponivel < ${Saldo a ser distribuido igualmente}, somar os valores que não puderam ser deduzidos
            ${Valor que não pôde ser deduzido} = ${Saldo a ser distribuido igualmente} - controlecota.saldodisponivel
            
            /* insert into controlecotamovimento ... values
            {
            	idprofissional: identificador da entidade do campo "Profissional"
            	idproduto: identificador da entidade do campo "Produto"
            	quantidade: -${Saldo a ser deduzido}
            	observação: "Movimento criado e processado manualmente pela aplicação",
            	sglorigem: 'WEB'
            	idnativo: 1
            	idnprocessado: 1
            	data: current_date
            	datamovimento:current_date
            }
            */
            
            /*
            update controlecota set saldodisponivel = saldodisponivel + ${controlecotamovimento.quantidade}
            */ -- Caso o saldo disponível não seja suficiente para ser deduzido, o campo saldodisponivel deve obrigatoriamente resultar em 0


            • Caso o saldo todo pôde ser deduzido, o sistema deverá retornar feedback visual toast (Success): "Operação realizada com sucesso"
      • Se "Modelo de distribuição" = "Dividir proporcionalmente ao valor de pedidos anteriores"
        •  Se o campo radio button estiver marcado como "Adicionar saldo"
          • A lógica de distribuição será realizada desta forma:

            Sem Formato
            Por exemplo, se filtrados usuários e produtos na modal
            
            SET1: set de controlecotas a serem deduzidas 
            	/* select idcontrolecota from controlecota where idproduto in (?) and idusuario in (?) and idnativo = 1
            
            /* select sum(pp.quantidadefaturada * pp.precofaturado) as valor from pedidoproduto pp
            inner join pedido p on pp.idpedido = p.idpedido
            inner join tiposituacaopedido tsp on tsp.idtiposituacaopedido = p.idtiposituacaopedido
            where p.idusuario in (:filtro_usuario)
            and pp.idproduto in (:filtro_produto) 
            and tsp.sgltiposituacaopedido in (:parametro_sim3g.cota.distribuicao.historico.sgltiposituacaopedido /* Deve ser criado pelo tools, opção 18 */
            group by pp.idproduto, p.idusuario
            */ CONSULTA_A
            
            /* select sum(valor) as valor_total from CONSULTA_A */
            
            O sistema deverá atribuir peso de 0 a 1 para todos os registros filtrados, com base na relação entre o valor e o valor total
            /* select idproduto,idusuario,valor/${valor_total} as peso */ CONSULTA_PESOS
            
            Com os pesos em mãos, o sistema deverá em primeiro momento contabilizar o excedente entre o saldo a adicionar e o saldo mínimo a adicionar
            ${Valor total distribuido igualmente} = SET1.size() * ${Valor do saldo mínimo}
            ${Valor restante} = ${Valor a ser adicionado} - ${Valor total distribuido igualmente} 
            
            Para cada registro:
            /* insert into controlecotamovimento ... values
            {
            	idprofissional: identificador da entidade do campo "Profissional"
            	idproduto: identificador da entidade do campo "Produto"
            	quantidade: ${Saldo a ser distribuido igualmente} + ${${Valor restante} * CONSULTA_PESOS.peso}
            	observação: "Movimento criado e processado manualmente pela aplicação",
            	sglorigem: 'WEB'
            	idnativo: 1
            	idnprocessado: 1
            	data: current_date
            	datamovimento:current_date
            }
            */
            
            /*
            update controlecota set saldodisponivel = saldodisponivel + ${controlecotamovimento.quantidade}
            */
        • Se o campo radio button estiver marcado como "Deduzir saldo"
            • O sistema deverá adicionar um movimento de cota igual negativo na controlecotamovimento para todos os controles de cota filtrados pelos filtros de controles de cota de destino e somá-lo ao saldo do controle de cota
              • Caso o saldo disponível pelo controle de cota não for suficiente para ser deduzido integralmente, o sistema deve retornar o valor que não pôde ser deduzido, com a mensagem pop up:
                • "Dedução de ${${Valor do campo deduzir saldo } - ${Valor que não pôde ser deduzido}} foi realizada com sucesso. Não foi possível deduzir  ${Valor que não pôde ser deduzido} do saldo de cota, devido à saldos disponíveis insuficientes" Opções "OK" e  "Deduzir restante"
                • Ao clicar em ok, fechar a modal
                • Ao clicar em "Deduzir restante", aplicar  ${Valor que não pôde ser deduzido} no campo "Deduzir saldo"


                  Sem Formato
                  Por exemplo, se filtrados usuários e produtos na modal
                  
                  SET1: set de controlecotas a serem deduzidas 
                  	/* select idcontrolecota from controlecota where idproduto in (?) and idusuario in (?) and idnativo = 1 and saldodisponivel > 0
                  
                  Mesma lógica para encontrar CONSULTA_PESOS da lógica de adição acima
                  
                  Para cada registro:
                  ${Saldo a ser deduzido proporcionalmente ao histórico} = ${Saldo a ser distribuido igualmente} + ${${Valor restante} * CONSULTA_PESOS.peso}
                  ${Saldo a ser deduzido} = controlecota.saldodisponivel >= ${Saldo a ser deduzido proporcionalmente ao histórico} ? ${Saldo a ser deduzido proporcionalmente ao histórico} : controlecota.saldodisponivel
                  -- Se controlecota.saldodisponivel < ${Saldo a ser deduzido proporcionalmente ao histórico}, somar os valores que não puderam ser deduzidos
                  ${Valor que não pôde ser deduzido} = ${Saldo a ser deduzido proporcionalmente ao histórico} - controlecota.saldodisponivel
                  
                  /* insert into controlecotamovimento ... values
                  {
                  	idprofissional: identificador da entidade do campo "Profissional"
                  	idproduto: identificador da entidade do campo "Produto"
                  	quantidade: -${Saldo a ser deduzido proporcionalmente ao histórico}
                  	observação: "Movimento criado e processado manualmente pela aplicação",
                  	sglorigem: 'WEB'
                  	idnativo: 1
                  	idnprocessado: 1
                  	data: current_date
                  	datamovimento:current_date
                  }
                  */
                  
                  /*
                  update controlecota set saldodisponivel = saldodisponivel + ${controlecotamovimento.quantidade}
                  */ -- Caso o saldo disponível não seja suficiente para ser deduzido, o campo saldodisponivel deve obrigatoriamente resultar em 0
                  • 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
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"
    Botões de ação
    • 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

    • "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
        • , 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,

Lógica:

  • O sistema deve