Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Vinícius

Agenda férias

Recommended Posts

Pessoal... tenho uma "agenda de férias" mas os resultados não estão sendo exibidos de uma maneira muito boa... o problema é que se o funcionário tem dois períodos distintos no mesmo mês, ele vai aparecer duas vezes. Eu queria que o nome aparecesse só uma vez e que os períodos ficassem na mesma linha... a exibição atual é mais ou menos assim:

-------------------------------------------------------------------------------------------------------------

FUNCIONÁRIO --- DIAS DO MÊS

funcionário1 --- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...

funcionário1 --- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...

-------------------------------------------------------------------------------------------------------------

Os vermelhos são os dias que ele está em férias... só que são muitos funcionários e a tabela dobra de tamanho e é difícil visualizar. O ideal seria assim:

-------------------------------------------------------------------------------------------------------------

FUNCIONÁRIO --- DIAS DO MÊS

funcionário1 --- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...

-------------------------------------------------------------------------------------------------------------

Além disso, não mostra se o dia é sábados e domingos... que não é imprescindível mas seria interessante... mostra só os dias do mês...

O script é esse:

$resultado = mysql_query("select u.nome, periodo, date_format(fp.dt_inicio, '%Y-%c-%d') as inicio, date_format(fp.dt_fim, '%Y-%c-%d') as fim from usuarios u
left join ferias fp on (fp.usuario_id = u.id_usuario)
where date_format(fp.dt_inicio, '%Y-%m') <= date_format('$d', '%Y-%m')
      and date_format(fp.dt_fim, '%Y-%m') >= date_format('$d', '%Y-%m')
ORDER BY u.nome");

if(mysql_num_rows($resultado) < 1) {
echo 'Não há servidores em férias ou afastados neste mês!!!';
}
while($l = mysql_fetch_array($resultado)) {

	$nome	= $l["nome"];
	$periodo = $l["periodo"];
	$inicio = $l["inicio"];
	$fim = $l["fim"];
	$inicio = strtotime($inicio);
	$fim = strtotime($fim);

if ($periodo == '0') {
	$cor = "doma";
	$cor1 = "td";
}else {
	$cor = "dom";
	$cor1 = "td";
}
	$dt = 1;
		for($i = 1; $i <= $n; $i++ ){/*agora vamos no banco de dados verificar os evendos*/
 		if($dt == 1){/*imprime os domingos*/
?>
<table> 
<tr>
<td width="200"><?php echo $nome; ?></td>

<td class="<?php 
$atual = $ano.'-'.$month.'-'.$i;
$atual = strtotime($atual);



		if (($atual >= $inicio) and ($atual <= $fim)){ echo $cor;}
		else { echo $cor1;}
		?>"><?php echo $i; ?></td>
	<?php
	   $dt++;
	   }else{/*imprime os dias normais*/

$atual = $ano.'-'.$month.'-'.$i;
$atual = strtotime($atual);
	?>
<td class="<?php 
		if (($atual >= $inicio) and ($atual <= $fim)){ echo $cor;}
		else { echo $cor1;}
		?>"><?php echo $i; ?></td>
		<?php 
		 $dt++;
		}
	   	}
	?>
</tr>
</table>

Alguém sabe juntar esses períodos e exibir os funcionários em uma única linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria isso com subselect, desta forma só compararia a data com o mês corrente em um array. se for igual add um checked e boa.

SELECT `id`, `nome`, (
SELECT 'checked' FROM periodo WHERE id_usuario = funcionario.id)
AS `checked` FROM `funcionario`;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.