Montar os nomes das colunas dinamicamente através de um loop

Scriptcase 9.9.014 (23)
Grid.
Trago os dias do mês como colunas.
Faço tratativas em cada dia.
Objetivo é percorrer todos os dias montado o nome de cada coluna e passando as condições necessarias!
Assim montaria apenas uma validação e percorreria todas as colunas no evento onRecord.
Algumas sugestão?

Exemplo:

// Supondo que $dias seja a quantidade de dias do mês

for ($dia = 1; $dia <= $dias; $dia++) {
// Adiciona um zero à esquerda para dias de 1 a 9
$diaFormatado = str_pad($dia, 2, ‘0’, STR_PAD_LEFT);

// Monta o nome da coluna usando o dia formatado
$coluna = ‘D’ . $diaFormatado;

// Aplica as tratativas necessárias para cada coluna
// Aqui você pode adicionar a lógica específica para cada dia, usando o valor da coluna $coluna

// Exemplo: verificação de valor ‘X’ ou ‘FOLGA’
$valor = ${$coluna};
if ($valor == ‘X’) {
// Valor igual a ‘X’, faça algo
} elseif ($valor == ‘FOLGA’) {
// Valor igual a ‘FOLGA’, faça algo
} else {
// Valor diferente de ‘X’ e ‘FOLGA’, faça algo
}
}

Desde já, agradeço!

:thinking: :thinking: :thinking: :thinking:

Qual a dúvida. Pois o texto do tópico inicial está confuso pacas.

também fiquei em duvida, se puder explicar de outro modo ou quem sabe ilustrar como quer q fique a tela, nem q seja num paint da vida.

Esse é o resultado que quero chegar!
Porém, em vez de fazer todas validações coluna por coluna, quero montar um loop for pegando o nome das colunas de uma forma dinamica. Assim em vez de fazer a mesma validação para as 31 colunas, faço apenas uma vez.

Código q utilizo hj:
switch ({D01}) {
case ‘X’:
tratativas aqui
break;
case ‘FOLGA’:
tratativas aqui
break;

}

switch ({D02}) {
case ‘X’:
tratativas aqui
break;
case ‘FOLGA’:
tratativas aqui
break;

}



Código que estou tentando fazer:
for ($dia = 1; $dia <= $dias; $dia++) {
$diaFormatado = str_pad($dia, 2, ‘0’, STR_PAD_LEFT);
$coluna = ‘D’ . $diaFormatado;
switch ($coluna) {
case ‘X’:
tratativas aqui
break;
case ‘FOLGA’:
tratativas aqui
break;

}
}

Não sei se consegui explicar bem, qualquer coisa só falar!

Se eu entendi bem eu faria toda a montagem dos dias no SQL e faria as validações no onRecord da grid.

Minha sugestão.

Eu faço dessa forma mesmo, trago toda a estrutura no SQL.
A questão é, na hora que trato cada coluna no PHP, passando ligação ou alteração de cor, é muitas validações, e é a mesma validação para todos os 31 dias.
Em vez de repetir o código diversas vezes, queria fazer um loop montando o nome da coluna.

Ex das colunas que tenho: D01, D02, D03, D04…
Trago essa informação via SQL.
Quando vou fazer validações tenho que fazer um código para cada coluna.

if ( {D01} = ‘Folga’) {
validação1
} else {
validação2
}

Faço esso mesmo código 31 vezes.

Queria uma forma para fazer o código apenas uma vez e a passar essas valições para todos os campos.

minha sugestão:

Criar uma tabela (que funcionaria como temporaria)

no evento onscriptinit popular essa tabela com os dados tratados.

montar a app grid em cima dessa tabela.

1 Curtida

A maior parte das validações faço no SQL.
Meu maior problema é para passar ligações e alterar a cor em cada dia.

O código que uso para apenas um dia:

/*** 01 ***/
switch ({D01}) {
case ‘X’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
sc_link(D01, control_tb_dp_escala_select_app.php , idColaborador = $idColab; dataEvento = $dataEvento; EditaEscalaOrigem = 1, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ccffdd’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘FOLGA’:
if ( {idajud_tpfunc} == 1 ) {
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idEscalaEditar = editarFolga($dataEvento, $idColab);
sc_link(D01, form_tb_dp_escala_editar_dia.php , id_glob_escala = $idEscalaEditar, “”, “modal”, 700, 1100);
}
sc_field_style({D01}, ‘#ccebff’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘AFASTADO’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idAfastamento = afastamento($dataEvento, $idColab);
sc_link(D01, form_tb_rh_afastamentos.php , validaCaminhoOrigem = 3; idtb_rh_afastamentos = $idAfastamento, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffcce6’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘FÉRIAS’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idAfastamento = afastamento($dataEvento, $idColab);
sc_link(D01, form_tb_rh_afastamentos.php , validaCaminhoOrigem = 3; idtb_rh_afastamentos = $idAfastamento, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ccffff’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘ATESTADO’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idAtestado = atestado($dataEvento, $idColab);
sc_link(D01, form_tb_saude_atestado.php , validaCaminhoOrigem = 3; idtb_saude_atestado = $idAtestado, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffffcc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘OC. DIÁRIA’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffebcc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘IFG’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffe6cc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘CONVOCAÇÃO ELEITORAL’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#e6f2ff’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘REALIZANDO ASO’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ccffe6’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘FOLGA PAGAMENTO’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ccffcc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘AUSÊNCIA HORAS’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffccff’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘BANCO DE HORAS’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ddffcc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘FALTA’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffd6cc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘FALTA JUSTIFICADA’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffd6cc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘SUSPENSÃO’:
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idOcDiaria = ocDiaria($dataEvento, $idColab);
sc_link(D01, form_tb_ocorrencia_diaria_cadastro.php , validaCaminhoOrigem = 3; idtb_ocorrencia_diaria_cadastro = $idOcDiaria, “”, “modal”, 700, 1100);
sc_field_style({D01}, ‘#ffe6cc’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
case ‘’:
{D01} = ‘FOLGA’;
if ( {idajud_tpfunc} == 1 ) {
$dataEvento = $anoOcorrido."-".$mesOcorrido."-01";
$idEscalaEditar = editarFolga($dataEvento, $idColab);
sc_link(D01, form_tb_dp_escala_editar_dia.php , id_glob_escala = $idEscalaEditar, “”, “modal”, 700, 1100);
}
sc_field_style({D01}, ‘#ccebff’, ‘’, ‘’, ‘’, ‘’, ‘’);
break;
}

Desculpa, não vou Estudar seu código.

Realmente um código deste tamanho é difícil de analisar… rsrsrs mas me surgiu uma idéia pra você colocar: Já que os teus campos são D01,D02,D03, etc… no onRecord você cria uma variável que vai começar de 01 e faça um FOR indo de 1 até 31 e dentro do FOR você concatena o ‘D’ com número acrescido de zero à esquerda (conforme o caso) e coloque o teu código apenas 1 vez dentro desse FOR.