Autor Tópico: Grid com checkbox + botão com função de duplicar registro  (Lida 4724 vezes)

fmanfredini

  • Iniciante
  • **
  • Mensagens: 89
    • Email
Grid com checkbox + botão com função de duplicar registro
« Online: Fevereiro 10, 2010, 11:02:13 am »
Alguem já teve a necessidade de criar uma grid com um campo checkbox, para que o usuário possa escolher quais registros duplicar.

Mas os registros não possuem chave unica, a chave é composta de 4 campos. Vou explicar melhor.

tenho uma tabela plano, onde existem n campos, dentre eles os 4 primeiros são inteiros e compõe a chave:

#Depto(int 3)
#Curso(int 4)
#Disciplina(int 7)
#Ano_Letivo(int 4)
.
.
.

Preciso duplicar os registros que os usuários marcarem o checkbox, apenas alterando o ano_letivo, para o ano corrente. Tipo o registro é do ano 2009, teria uma copia idêntica para o ano de 2010.
Não sei como fazer isso no scriptcase. Se alguem tiver a dica, por favor me ajude.

Rodrigo Lins

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 504
    • Overalt I.T
Re: Grid com checkbox + botão com função de duplicar registro
« Responder #1 Online: Fevereiro 10, 2010, 02:38:49 pm »
Boa Tarde,

Eu não olhei o que você me enviou ainda, mas creio que uma forma seria como lhe expliquei mesmo. Fazendo um formulário Multiplo Registro, deixando todos os campos como Readonly, e criando um campo do tipo checkbox, para selecionar os registros e armazenar na tabela.

Uma outra forma seria fazer tudo em um controle mesmo, mostrar algumas informações dos registros em vários checkbox e a pessoa selecionar se deseja ou não duplicar o registro, pode ser que seja até mais fácil e simples.

Mas, creio que alguém já tenha feito algo parecido e que tenha uma idéia melhor. É sempre interessante ver outra opiniões e soluções.

Rodrigo Lins.

robsonsilva

  • Visitante
Re: Grid com checkbox + botão com função de duplicar registro
« Responder #2 Online: Fevereiro 16, 2010, 09:13:37 am »
Olá, bom dia!

Interessante a questão, já vi outras mensagens com a mesma dúvida.. Não testei aqui, mas imagino que seria algo assim:

1º - Criar um campo texto na consulta, inserindo manualmente o checkbox com array dos valores;
2º - Criar uma aplicação blank para tratar e duplicar os registros;
3º - Fazer a ligação entre a consulta e a apl blank, enviando o array como parâmetro

Exemplo:

- Na consulta, criar um campo Texto (ex: nome "check") e um botão do tipo Ligação (ex: nome "duplicar")

- No Evento OnRecord da consulta:

$valor = {Depto}."/".{Curso}."/".{Disciplina}."/".Ano_letivo;   
// Exemplo de valor armazenado: "121/1058/5945557/2009"
{check} = "<input name='opt[]' type='checkbox' value='$valor'>";


- Criar uma ligação pro botão "duplicar", apontando pra aplicação blank e enviando $opt como parametro


---------------------------------------------------------------------------------
- Aplicação Blank (ex: ctt.php):


/**
- Criar função duplicar -> Confere dados e realiza a duplicação.
- Recuperar valores de $opt
- Separar cada registro selecionado na consulta
- Separar os campos por "/"
- Chamar a função de duplicação
- Conferir se todos forem alterados (retorna para consulta ou mostra erros)
*/


function duplicar($depto,$curso, $disc, $ano, $ano_n)
{
   sc_lookup(sqlcont, "SELECT COUNT(*) FROM tabela WHERE Depto = '$depto' AND Curso = '$curso' AND Disciplina = '$disc' AND Ano_Letivo = '$ano'");
   if (empty({sqlcont}) || {sqlcont}[0][0] == 0)
   {
      $erro = "- Falha ao localizar registro: $depto / $curso / $disc / $ano <br />";      
      return $erro;
   }
   else
   {
      sc_exec_sql("INSERT INTO tabela (Depto, Curso, Disciplina, Ano_Letivo, ...) VALUES ($depto, $curso, $disc, $ano_n, ..)");
      // adicionar outros campos necessários
      return true;
   }
}

$campo = [opt];
$qtde   = count($campo);
if ($qtde === 0)
{
   // nenhum campo selecionado
   sc_redir(consulta.php);
}

$msg = "";
for ($i = 0; $i < $qtde; $i++)
{
   $ef = explode("/", $campo[$i]);
   $depto = trim($ef[0]);
   $curso = trim($ef[1]);
   $disc = trim($ef[2]);
   $ano = trim($ef[3]);
   $ano_n = date('Y');
   $dup = duplicar($depto, $curso, $disc, $ano, $ano_n);
   if ($dup != true)
   {
      // se a função não retornar 'true', armazenar os erros na variavel msg
      $msg .= $dup;
   }
}


// se a variavel msg estiver vazia, redirecionar para consulta, senão, mostrar os erros.
if ($msg == "")
{
   sc_commit_trans(); // apenas se usar transactions (mysql)
   sc_redir(consulta.php);
}
else
{
   echo "<center> <b>Erros ao duplicar registros</b>: <br /><br />";
   echo $msg;
   echo "<br /><a href='../consulta/consulta.php'>Voltar</a></center>";
}


Acho que a idéia é mais ou menos isso aí..
Com certeza existem erros no código, precisa corrigi-lo e também adaptá-lo conforme suas necessidades, mas espero ter ajudado de alguma forma..

Att.
Robson
« Última modificação: Fevereiro 16, 2010, 09:15:10 am por Robson Silva »

Rodrigo Lins

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 504
    • Overalt I.T
Re: Grid com checkbox + botão com função de duplicar registro
« Responder #3 Online: Fevereiro 18, 2010, 10:40:58 am »
Bom Dia,

Robson, você conseguiu pegar o valor que está no "checkbox" da consulta, em alguns testes rapidamente que fiz, não consegui de forma alguma pegar este valor na aplicação de consulta. Vou tentar utilizar este seu código para testar.

E com relação a dúvida do Fulvio, eu passei um email para ele falando de uma possível solução que peguei com um companheiro. Fiz em uma aplicação de formulário Múltiplo Registros, coloquei todos os campos como Label e criei um novo campo do tipo texto.

No evento onLoadRecord, foi colocado o seguinte código:

{check} = "<input name='cor[]' type='checkbox' value='{id}'>";

E por fim, criado um botão php para fazer o processamento desejado com o valor proveniente do checkbox criado.

Exemplo do código do botão:

 if(isset($_POST['cor'])) {
             // Faz um loop no Array de checkbox
             // A função count retorna a quantidade de checkbox selecionado

             for($i = 0; $i < count($_POST['cor']); $i++) {

$valor = $_POST['cor'][$i];   
  sc_lookup(ds,"SELECT id, nome, cidade FROM tb_qualquer WHERE id = $valor");
   
$nome = {ds[0][1]};
$cidade = {ds[0][2]};
  sc_exec_sql("INSERT INTO tb_qualquer_duplicata (id,nome,cidade) VALUES ($valor,'$nome','$cidade')");
 
             }
     }   
         sc_exit(sel);



Rodrigo Lins.