Ir para conteúdo

POWERED BY:

Arquivado

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

walmir.silva

folha de ponto

Recommended Posts

Olá pessoal? estou precisando de uma ajuda!

Eu estou fazendo um controle de folha de ponto, mas na hora de exibir os registros não estou conseguindo

ordenar os dia com o numero de referência da folha de ponto.

atualmente o resultado aparece assim :

 

1 | 03-11-2008 | 08:01 | 12:00 | 13:01 | 17:00

2 | 04-11-2008 | 08:02 | 12:00 | 13:05 | 17:00

3 | 05-11-2008 | 08:00 | 12:00 | 13:00 | 17:00

4 | 06-11-2008 | 08:05 | 12:00 | 13:08 | 17:00

...

31|...

 

Eu quero que apareça assim:

 

1 | (vazio)

2 | (vazio)

3 | 03-11-2008 | 08:01 | 12:00 | 13:01 | 17:00

4 | 04-11-2008 | 08:02 | 12:00 | 13:05 | 17:00

...

31| ...

e assim por diante... O código é esse:

 

$a = 1;
while($a < 32) {
$row = mysql_fetch_object($sql);
// exibição do resultado obtido da consulta $row
	if(isset($row) && !empty($row)) {
		$datasema = $row->Date_ponto;
		$exibirH1 = $row->H1;
		$exibirH2 = atraso($exibirH1,$row->H2,$row->H3);
		$exibirH3 = atraso($exibirH2,$row->H3,$row->H4);
		$exibirH4 = atraso($exibirH3,$row->H4,$row->H5);
		$subDia   = substr($datasema, 0,2);
		$subDia   = (int)$subDia;
	} else {
		$datasema = '';
		$exibirH1 = '';
		$exibirH2 = '';
		$exibirH3 = '';
		$exibirH4 = '';
		$subDia   = '';
	}
// exibe na tela os registro de ponto do usuario
$b = $a;
if($subDia == $b) {
echo'
	<div>
		<span id="exibdia">'.$b.'</span>
		<span id="exibdatames">'.$datasema.'</span>
		<span id="exibentrada">'.$exibirH1.'</span>
		<span id="exibsaida">'.$exibirH2.'</span>
		<span id="exibentrada">'.$exibirH3.'</span>	
		<span id="exibsaida">'.$exibirH4.'</span>
		<span id="exibH1">'.$atrasoH1.'</span>
		<span id="exibH2">'.$atrasoH2.'</span>					
		<span id="exibH1">'.$atrasoH3.'</span>
		<span id="exibH2">'.$atrasoH1.'</span>
	</div>';
}
else {
echo'
	<div>
		<span id="exibdia">'.$b.'</span>
		<span id="exibdatames"> </span>
		<span id="exibentrada"> </span>
		<span id="exibsaida"> </span>
		<span id="exibentrada"> </span>	
		<span id="exibsaida"> </span>
		<span id="exibH1"> </span>
		<span id="exibH2"> </span>				
		<span id="exibH1"> </span>
		<span id="exibH2"> </span>
	</div>';
}
	$a++;
}
Aguardo resposta obrigado a todos!!!

Confiança sempre!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

if($subDia == $b)
quem é subdia, e quem é b

da um echo neles pra testar

$subDia é o dia do registro feito pelo usuário($subDia-mes-ano).

 

$b é o valor sendo recebido pelo incremento do loop(1,2,3 ...31).

 

Obrigado pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja deu o echo? Porque sua verificação ta certa, embora seu script estranho.

Desculpa! é que tem "uma pancade de código anterior"... rsrrs

é o seguinte, o if e o else estão dando certo só que a verificação "estaciona" no else não continua a verificação(if e else, if e else)... Não sei se estou sendo claro...Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não esta sendo mesmo ;P, vai comentado conferindo, porque sem ter o script inteiro e dificil indentificar o erro

Obrigado pelo empenho em ajudar!

segue um resumo do código, porque tem verificação de dias úteis, feriado fixo, feriado móvel, calculos de atraso, horas extras, etc... lá vai o resumo:

<?php
//inicio sessão
set_time_limit(0);
session_start();

// script para verificação de erros no código
error_reporting(E_ALL);
@ini_set('display_errors', '1'); 
@ini_set('register_globals', '0');
if (version_compare(phpversion(), "4",">")) {
	 if (!extension_loaded('mysql')){
		  print("Nao esta habilitada a dll Mysql");
		  exit;
	 }
}
//verifica se o arquivo de conexão existe
if(!file_exists("cp.ado/conexao.php")) {
	
	print "<script language=\"javascript\">
			alert(\"ARQUIVO DE CONEXAO NAO ENCONTRADO!\");
			history.back(-1);
			</script>";	
		exit;
} else {

	require "cp.ado/conexao.php"; // arquivo de conexão
}
// nova e abre conexão com o banco mysql
$con = new Conexao();
$con->Abre_Conexao();


// campos para inserção das funções:
//função para selecionar os registros do cartão na máquina de ponto, caso haja mais de 4 registros faz a verificação de qual registro desconsiderar
function atraso($var1,$var2,$var3) 
{
	$limite = 20;	
	$hr1 = substr($var1,0,2);		
	$mt1 = substr($var1,3,2)+$limite;
	$hrv = $hr1.":".$mt1;			

	if($var2 < $hrv ) {
		$hr = $var3;
	} else {
		$hr = $var2;
	}
	return $hr;
}
//dados selecionados do arquivo de seleção do usuário
	if(isset($_POST['usup']) && !empty($_POST['usup'])) {
		$usup  = $_POST['usup'];
	} else {
		$usup = "";
	}
	if(isset($_POST['meses']) && !empty($_POST['meses'])) {
		$meses = $_POST['meses'];
	} else {
		$meses = "";
	}
	if(isset($_POST['anoss']) && !empty($_POST['anoss'])) {
		$anoss = $_POST['anoss'];
	} else {
			$anoss = "";
	}
	// seleciona o mes e ano postado pelo arquivo cp_exibir.php
	$exibirmes = $anoss.$meses;
	if(!empty($exibirmes)) {
		$exibirmes = $anoss.$meses;
		$formatmes = substr($exibirmes, 2,2).'-'.substr($exibirmes,0,2);
	} else {
		$exibirmes = "";
		$formatmes = "";
	}

// consulta basica para exibição dos registros de ponto do usuario, retorna entradaH1 / saidaH2 / entradaH3 / saidaH4, e uma possivel marcação a mais do cartão magnetico
 
$sql = $con-> SQL("SELECT
	x.Cod_Userponto,x.Data_import,
	DATE_FORMAT(x.Data_P, '%d-%m-%Y') AS Date_ponto,
	(
	  SELECT CONCAT(a.Hora,':',a.Minuto) FROM cartao_ponto a
	   WHERE a.Cod_Userponto = x.Cod_Userponto
	   AND a.Data_P = x.Data_P
	   ORDER BY a.Data_p, a.Hora, a.Minuto
	   LIMIT 0,1
	)
	AS H1,
	(
	  SELECT CONCAT(a.Hora,':',a.Minuto) FROM cartao_ponto a
	   WHERE a.Cod_Userponto = x.Cod_Userponto
	   AND a.Data_P = x.Data_P
	   ORDER BY a.Data_p, a.Hora, a.Minuto
	   LIMIT 1,1
	)
	AS H2,
	(
	  SELECT CONCAT(a.Hora,':',a.Minuto) FROM cartao_ponto a
	   WHERE a.Cod_Userponto = x.Cod_Userponto
	   AND a.Data_P = x.Data_P
	   ORDER BY a.Data_p, a.Hora, a.Minuto
	   LIMIT 2,1
	)
	AS H3,
	(
	  SELECT CONCAT(a.Hora,':',a.Minuto) FROM cartao_ponto a
	   WHERE a.Cod_Userponto = x.Cod_Userponto
	   AND a.Data_P = x.Data_P
	   ORDER BY a.Data_p, a.Hora, a.Minuto
	   LIMIT 3,1
	)
	AS H4,
	(
	  SELECT CONCAT(a.Hora,':',a.Minuto) FROM cartao_ponto a
	   WHERE a.Cod_Userponto = x.Cod_Userponto
	   AND a.Data_P = x.Data_P
	   ORDER BY a.Data_p, a.Hora, a.Minuto
	   LIMIT 4,1
	)
	AS H5
FROM cartao_ponto x
WHERE x.Cod_Userponto='$usup'
AND substring(Data_P,1,4) = '$exibirmes'
GROUP BY x.Data_p
ORDER BY x.Data_p, x.Hora, x.Minuto");

// consulta para exibição do usuario e horario de trabalho(outra tabela)
$sqlusuario = $con-> SQL("SELECT * FROM user_ponto where Cod_User='$usup'");

$exibuser = mysql_fetch_object($sqlusuario);//objeto da consulta

// verifica se as variáveis estao vazias	
	if(!empty($exibuser->Nome_User)) {
		$exibnome = $exibuser->Nome_User;
	} else {
		$exibnome = '';
	}
	if(!empty($exibuser->Setor)) {
		$exibsetor = $exibuser->Setor;
	} else {
		$exibsetor = '';
	}
	if(!empty($exibuser->H1) && !empty($exibuser->H2) && !empty($exibuser->H3) && !empty($exibuser->H4)) {
		$exibH1 = $exibuser->H1;
		$exibH2 = $exibuser->H2;
		$exibH3 = $exibuser->H3;
		$exibH4 = $exibuser->H4;
	} else {
		$exibH1 = '';
		$exibH2 = '';
		$exibH3 = '';
		$exibH4 = '';
	}
//inicio do html
echo'
<html>
	<head>
		<title>Cartão de ponto</title>
		<link rel="stylesheet" type="text/css" href="cp.css/cp_style.css" />
	</head>
<body>
	<form method="post" action="cp_corrigir.php" name="form">
</head>
<body>';

// inicio da exibição do cartão de ponto html e inserçao dos respectivos valores dos campos
echo'
<div id="centro">
	<div id="title">
		Associação Cartólica Nossa Senhora de Fátima
	</div>
	<div>
		<span id="funcionario"> Funcionário:	</span>
		<span id="nome">'.$exibnome.'</span>
	</div>
	<div>
		<span id="data"> Mês - Ano: </span>
		<span id="exibedata">'.$formatmes.'</span>
		<span id="setor"> Setor: </span>
		<span id="nomesetor">'.$exibsetor.'</span>
		<span id="horario">	Horário de trabalho </span>
	</div>
	<div>
		<span id="horario1">'.$exibH4.'</span>
		<span id="horario1">'.$exibH3.'</span>
		<span id="horario1">'.$exibH2.'</span>
		<span id="horario1">'.$exibH1.'</span>
	</div>
	<div>
		<span id="manha"> manhã </span>
		<span id="tarde"> Tarde </span>
	</div>
	<div>
		<span id="dia">	 Dia </span>
		<span id="datames"> Data </span>
		<span id="entrada"> Entrada </span>
		<span id="saida">   Saida </span>
		<span id="entrada"> Entrada </span>	
		<span id="saida">   Saida </span>
		<span id="H1">	  H1 </span>
		<span id="H2">	  H2 </span>								
		<span id="H2">	  H3 </span>
		<span id="H1">	  H4 </span>
	</div>';
// inicio da exibição tabela com os registros dos usuários...
$a = 1;

while($a < 32) {

$row = mysql_fetch_object($sql);

// exibição do resultado obtido da consulta $row
	if(isset($row) && !empty($row)) {
		$datasema = $row->Date_ponto;
		$exibirH1 = $row->H1;
		$exibirH2 = atraso($exibirH1,$row->H2,$row->H3);
		$exibirH3 = atraso($exibirH2,$row->H3,$row->H4);
		$exibirH4 = atraso($exibirH3,$row->H4,$row->H5);
		$subDia   = substr($datasema, 0,2);
		$subDia   = (int)$subDia;
	} else {
		$datasema = '';
		$exibirH1 = '';
		$exibirH2 = '';
		$exibirH3 = '';
		$exibirH4 = '';
		$subDia   = '';
	}
// exibe na tela os registro de ponto do usuario ordenado, modo de exibição parecido com o cartão de ponto convencional(papel)
$b = $a;
if($subDia == $b) {

echo'
	<div>
		<span id="exibdia">'.$b.'</span>
		<span id="exibdatames">'.$datasema.'</span>
		<span id="exibentrada">'.$exibirH1.'</span>
		<span id="exibsaida">'.$exibirH2.'</span>
		<span id="exibentrada">'.$exibirH3.'</span>	
		<span id="exibsaida">'.$exibirH4.'</span>
		<span id="exibH1">atrasoH1</span>
		<span id="exibH2">atrasoH2</span>					
		<span id="exibH1">atrasoH3</span>
		<span id="exibH2">atrasoH4</span>
	</div>';
}
else {

echo'
	<div>
		<span id="exibdia">'.$b.'</span>
		<span id="exibdatames"> </span> //os campos em branco tem um caractere especial em HTML
		<span id="exibentrada"> </span> 
		<span id="exibsaida"> </span>
		<span id="exibentrada"> </span>	
		<span id="exibsaida"> </span>
		<span id="exibH1"> </span>
		<span id="exibH2"> </span>						
		<span id="exibH1"> </span>
		<span id="exibH2"> </span>
	</div>';
}
	$a++;
}

echo'
</body>
</html>';

// fecha conexão
$con->Fechar_Conexao();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vamo acabar com isso:

<?php
	$subdia = '12-12-08';
	$subdia2 = substr($subdia,0,2);
	$subdia2<9 ? $subdia2 = substr($subdia2,1,1) : ""; // Se for menor que 9 tira o zero do lado esquerdo
	echo $subdia2.' | '.$subdia;
?>

Faz isso ao inves de checar se $b = $subdia, assim o numero do lado de $subdia, sempre vai ser o dia dele, porém os outros números não irão aparecer... foi a solução que eu encontrei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vamo acabar com isso:

<?php
	$subdia = '12-12-08';
	$subdia2 = substr($subdia,0,2);
	$subdia2<9 ? $subdia2 = substr($subdia2,1,1) : ""; // Se for menor que 9 tira o zero do lado esquerdo
	echo $subdia2.' | '.$subdia;
?>

Faz isso ao inves de checar se $b = $subdia, assim o numero do lado de $subdia, sempre vai ser o dia dele, porém os outros números não irão aparecer... foi a solução que eu encontrei.

O zero de inicio eu retiro aqui:

$subDia = (int)$subDia;

Eu preciso é exibir os registros de ponto dos usuário combinando com os números de marcação da folha de ponto que vai de 1 á 31, onde 1 tem que exibir o registro com a data 01-11-2008, o 2 tem que exibir o regitro com a data 02-11-2008 se não houver registro por exemplo no dia 3 o campo deve ficar vazio e assim por diante... Obrigado pelo empenho...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi isso que voce tentou fazer no seu script, mas esta dando erro certo? e fica dificil pra eu corrigir seu script, a única coisa que voce tem que fazer agora e corrigilo, tentativas comentarios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa parte do script só exibe o dia emparelhado com a data

1 | 01-11-2008

2 | 02-11-2008

5 | 05-11-2008

7 | 07-11-2008

o que eu preciso é na primeira coluna apareça de 1 a 31(fixo) e na segunda coluna os dias se ordenem de acordo com a coluna um. Na coluna dois se não existir por exemplo os dias 03-11-2008, 04-11-2008, 06-11-2008 como mostra o exemplo assima, e apareça assim:

1 | 01-11-2008

2 | 02-11-2008

3 | 'vazio'

4 | 'vazio'

5 | 05-11-2008

6 | 'vazio'

7 | 07-11-2008

Valeu pela força!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode criar uma variavel de controle

 

e testar se existe um salto

 

se existir preenche

 

ou entao usa um for mesmo e faz um select para cada dia

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.