Jump to content
Sign in to follow this  
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?

Share this post


Link to post
Share on other 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`;

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.