Ir para conteúdo

POWERED BY:

Arquivado

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

ANGELA.BRANCO

Horas de Funcionarios

Recommended Posts

Angela,

 

De mais detalhe do que você precisa,

 

Exemplo,

 

Um sistema onde você coloca o codifo do Funcionario, Hora de Entra, Hora de Saida , Hora entra Extra, Hora Saida Extra.... etc etc

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe, nao quero desanimar ninguem, mas nao sei se esse tipo de sistema seria o ideal para ser desenvolvido por iniciantes no php, devido a algumas complexidades. talvez fosse razoavel começar com um sistema mais básico de cadastros.

 

 

abraço

http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem newmax, não sou nenhuma expert em php, mas ja não me considero tão iniciante, e até hj eu percebi que o forum esta aqui para ajudar, os iniciantes e todos que tiverem qualquer duvida, pois se eu fosse expert não estaria no forum como membro, sistema básico de cadastros acho que 70% das pessoas que frequentam o site sabem fazer, eu não pedi de forma alguma algum script pronto, pedi algo que pudesse parecer com o que eu estou precisando, se você não sabe aonde tem, não precisa sair por ai desanimando as pessoas.

 

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

então angela, acho que oq vai te ajudar eh o mktime;

 

Ele faz esse calculo automatico pra você. Vou colocar um exemplo dele funcionando ai em baixo, só pra você ter uma ideia:

 

PHP
//definimos a hora de agora e o dia, use o date() para buscar a hora correta automaticamente, fica ate mais facil, mas aqui vou determinar uma por uma para o exemplo

 

$dia = 10;

$mes = 05;

$ano = 2006;

$hora = 15;

$minutos = 32;

$segundos = 52;

 

//Ok, a saida do funcionario digamos no 1 exemplo é daqui a 12 horas... então para saber qual a hora de saida temos que juntar a funcao date(), que serve para definirmos como vai sair a hora e a data, e o mktime para adicionarmos 12 horas na carga horaria dele.

 

$data_saida = date("H:i:s - M-d-Y", mktime($hora+12, $minutos, $segundos, $mes, $dia, $ano));

 

echo $data_saida;

 

//O resultado já te dara o Dia de amanha as 3h da madruga certinho...

 

 

Espero que tenha entendido.. duvidas.. posta ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem rodrigo estou aqui me matando rsrs, consegui calcular as horas trabalhadas e vou colocar o meu script aqui, o grande problema são as horas extras, e como eu descubro se o dia da semana é sabado, domingo ou feriado.

 

Script

 

<?php
if(file_exists("init.php")) {
	require "init.php";
} else {
	echo "Arquivo init.php não foi encontrado";
	exit;
}

if(!function_exists("Abre_Conexao")) {
	echo "Erro o arquivo init.php foi auterado, nao existe a função Abre_Conexao";
	exit;
}

Abre_Conexao();

$sql = mysql_query("SELECT * FROM dados");

while ($rs = mysql_fetch_assoc($sql)) {
	$data		= $rs["data"];
	$entr_manha  = $rs["entr_manha"];
	$saida_manha = $rs["saida_manha"];
	$entr_tarde  = $rs["entr_tarde"];
	$saida_tarde = $rs["saida_tarde"];


$dia = substr($data, 8, 2);
$mes = substr($data, 5, 2);
$ano = substr($data, 0, 4);
$hora1	  = explode(":",$entr_manha);
$hora2	  = explode(":",$saida_manha);
$hora3	  = explode(":",$entr_tarde);
$hora4	  = explode(":",$saida_tarde); 

$acumulador1 = ($hora1[0] * 3600) + ($hora1[1] * 60) + $hora1[2];
$acumulador2 = ($hora2[0] * 3600) + ($hora2[1] * 60) + $hora2[2];
$acumulador3 = ($hora3[0] * 3600) + ($hora3[1] * 60) + $hora3[2];
$acumulador4 = ($hora4[0] * 3600) + ($hora4[1] * 60) + $hora4[2];

$resultado  = $acumulador2 - $acumulador1;
$resultado1 = $acumulador4 - $acumulador3;

$hora_ponto  = floor($resultado  / 3600);
$hora_ponto1 = floor($resultado1 / 3600);

$resultado  = $resultado  - ($hora_ponto * 3600);
$resultado1 = $resultado1 - ($hora_ponto1 * 3600);

$min_ponto  = floor($resultado  / 60);
$min_ponto1 = floor($resultado1 / 60);

$resultado  = $resultado  - ($min_ponto  * 60);
$resultado1 = $resultado1 - ($min_ponto1 * 60);

$secs_ponto = $resultado;
$secs_ponto1 = $resultado1;

?>
<table border="1">
<tr>
<td><strong>Data:		 </strong></td>
<td><strong>Hora Entrada: </strong></td> 
<td><strong>Hora Saida Almoço: </strong></td> 
<td><strong>Hora Volta Almoço:</strong></td> 
<td><strong>Hora Saida:</strong></td>
<td><strong>Total de Horas Trabalhadas:</strong></td> 
</tr>
<tr>
<td><?php print "$dia/$mes/$ano";?> </td>
<td><?php print $entr_manha;?> </td> 
<td><?php print $saida_manha;?> </td> 
<td><?php print $entr_tarde;?> </td> 
<td><?php print $saida_tarde;?> </td> 
<td><?php print $hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1;?></td>
<?php // print $hora_ponto.":".$min_ponto.":".$secs_ponto;?>
<?php //print $hora_ponto1.":".$min_ponto1.":".$secs_ponto1;?>
</tr>
</table>
<?php
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, dia da semana eh simples. Se você olhar a funcao date(), quando você puxa o dia por D maiusculo mesmo, ele te retorna 3 letras que representam o dia da semana em ingles(ex.: domingo = SUNday = SUN). A partir dai podemos criar if´s.

 

Agora feriado tah querendo demais... ahahahah... Feriado eh complicado definir pelo fato de cada pais e cidade ter seus feriados especificos... tecnicamente você tem que definir isso na mão... eu diria q em 1 ano você defini todos os feriados sem problemas... ahahahhahah

 

Quanto ao seu script, ele tah certo, a ideia tah boa sim, só que se você quer um dia preciso, creio que o mktime faz isso pra você mais rapido, imagine mudar o mês na mão com a variavel de dia 31 ou 30... e tendo mes que tem 28 dias?!!? Complicado né?! o mktime faz isso automatico pra você... ai você num tem que colocar um monte de if

 

entendeu!? Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom,

 

 

olhando aqui todos os posts, e vendo até o amigo lá falando sobre iniciante num script desse, é o seguinte concordo e discordo do que ele disse, concordo por que as vezes pode ser feito algo mais elaborado, que só a experiência em modelagem de banco de dados e lógica te daria, e discordo por que um dia você não é mais iniciante, e quando é que avança se não tentar ?

 

seguinte,

 

eu não faria dessa maneira não, pode ser que dessa aqui seja mais fácil, e mais manipulável...

lembra que numa empresa você pode ter funcionários com horas a serem cumpridas diferentes, 12, 8, 6 horas por dia....

e claro horas extras diferentes.

 

primeiro passo,

acrescentar a tabela de funcionários um campo, carga horária ! nele você coloca lá quantas horas o funcionário precisa ter trabalhadas por dia,

ou campo dias da semana que ele trabalha: SEG,TER,QUA,QUI,---, uns sábado outros não...

 

ai com essas estrutura montada, eu faria uma tabela...

horas

datetime //data e hora

id_funciona //id funcionario

tipo //colocaria INT(1) e 1 para entrada e 2 saída, 3 começo do horário de almoço, 4 fim do horário de almoço

 

com esses dados, é possível você ir fazendo somente os calculos das horas, somando as horas trabalhadas do dia, você bate com a carga horária da primeira dela, e assim sabe se ele está fazendo ou não hora extra, e pelo dia da semana também...

 

se não entendeu o que eu disse, é normal, pois vocês estão com uma estrutura na cabeça, é somente uma sugestão o que eu disse,

acho que ficaria mais fácil...

 

 

abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, apesar de não terem dado importância para o que eu falei sobre os funcionários,,

 

 

ai vai a funcção....

 

function cab_hora($l){
	$total = "0";
	$sql = mysql_query("SELECT u_data, u_hora FROM users_stats WHERE id='$l'");

	 while ($r = mysql_fetch_array($sql)){


		  $data1 = $r[0]." ".$r[1];
		  $data11 = date("Y-m-d")." ".strftime("%H:%M:%S");

		   $unix_data1 = strtotime($data1);
		   $unix_data11 = strtotime($data11);

		   }
		  $nHoras   = ($unix_data11 - $unix_data1) / 3600;
		  $nMinutos = (($unix_data11 - $unix_data1) % 3600) / 60;

			 $total = sprintf('%02dh%02d', $nHoras , $nMinutos);

		  return $total;
   }

o argumento $l, seria mesmo o ID do meu usuário, pq eu uso essa função para contar o tempo de quantas horas o meu usuário está logado,

e ele faz uma comparação entre a data e hora atuais, com a do momento que ele logou... que o que o sql tah fazendo ali.

 

a função nao tem mistério olha direitinho que da pra entender tudo que tah fazendo..

 

abraços,

 

agora deve ajudar...

 

ela retorna 00h00

Compartilhar este post


Link para o post
Compartilhar em outros sites

IntDigital.com.br eu li sim o que você escreveu na verdade se você olhar mais acima eu ja calculo as horas extra, só o que me pediram é um filtro super gigantesco, tipo:

 

Na semana, se trabalhar das 8 as 20 1hora equivale a 1 hora.

das 20 as 22 1hora equivale a 1hora e 30minutos

das 22 as 05 1 hora equivale a 2 horas

das 05 as 08 1 hora equivale a 1hora e 30minutos

 

Sábado, Domingo e feriados das 08 as 20 1hora equivale a 1hora e 30minutos

das 20 as 22 1hora equivale a 2 horas

das 22 as 05 1hora equivale a 2 horas

das 05 as 08 1 horas equivale a 2horas

 

ja consegui detectar se é sabado, domingo ou feriado mas essas transformações estão me deixando pirada, e eu não achei sequer um exemplo na net de como montar isso.

 

ai vai meu código para você ter uma idéia.

 

<?php
if(file_exists("init.php")) {
	require "init.php";
} else {
	echo "Arquivo init.php não foi encontrado";
	exit;
}

if(!function_exists("Abre_Conexao")) {
	echo "Erro o arquivo init.php foi auterado, nao existe a função Abre_Conexao";
	exit;
}

Abre_Conexao();

$sql = mysql_query("SELECT * FROM dados order by data");

while ($rs = mysql_fetch_assoc($sql)) {
	$data		= $rs["data"];
	$entr_manha  = $rs["entr_manha"];
	$saida_manha = $rs["saida_manha"];
	$entr_tarde  = $rs["entr_tarde"];
	$saida_tarde = $rs["saida_tarde"];
	$feriado	 = $rs["feriado"];


$ano =  substr("$data", 0, 4);
$mes =  substr("$data", 5, -3);
$dia =  substr("$data", 8, 9);

$diasemana = date("w", mktime(0,0,0,$mes,$dia,$ano) );

switch($diasemana) {
	case"0": $diasemana = "Domingo";	   break;
	case"1": $diasemana = "Segunda-Feira"; break;
	case"2": $diasemana = "Terça-Feira";   break;
	case"3": $diasemana = "Quarta-Feira";  break;
	case"4": $diasemana = "Quinta-Feira";  break;
	case"5": $diasemana = "Sexta-Feira";   break;
	case"6": $diasemana = "Sábado";		break;
}
$hora1	  = explode(":",$entr_manha);
$hora2	  = explode(":",$saida_manha);
$hora3	  = explode(":",$entr_tarde);
$hora4	  = explode(":",$saida_tarde); 

$acumulador1 = ($hora1[0] * 3600) + ($hora1[1] * 60) + $hora1[2];
$acumulador2 = ($hora2[0] * 3600) + ($hora2[1] * 60) + $hora2[2];
$acumulador3 = ($hora3[0] * 3600) + ($hora3[1] * 60) + $hora3[2];
$acumulador4 = ($hora4[0] * 3600) + ($hora4[1] * 60) + $hora4[2];

$resultado  = $acumulador2 - $acumulador1;
$resultado1 = $acumulador4 - $acumulador3;

$hora_ponto  = floor($resultado  / 3600);
$hora_ponto1 = floor($resultado1 / 3600);

$resultado  = $resultado  - ($hora_ponto * 3600);
$resultado1 = $resultado1 - ($hora_ponto1 * 3600);

$min_ponto  = floor($resultado  / 60);
$min_ponto1 = floor($resultado1 / 60);

$resultado  = $resultado  - ($min_ponto  * 60);
$resultado1 = $resultado1 - ($min_ponto1 * 60);

$secs_ponto = $resultado;
$secs_ponto1 = $resultado1;

if ($entr_manha and $saida_manha and $entr_tarde and $saida_tarde <= "20:00:00" and $feriado=="N" and $diasemana!="Sábado" and $diasemana!="Domingo"){
$extra = $hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1 - "08:00:00";
?>
<table border="1">
<tr>
<td><strong>Data:		 </strong></td>
<td><strong>Dia da Semana:</strong></td>
<td><strong>Hora Entrada: </strong></td> 
<td><strong>Hora Saida Almoço: </strong></td> 
<td><strong>Hora Volta Almoço:</strong></td> 
<td><strong>Hora Saida:</strong></td>
<td><strong>Total Geral:</strong></td> 
<td><strong>Total Extras: </strong></td>
<td><strong>24 as 05</strong></td>
<td><strong>18 as 20</strong></td>
<td><strong>20 as 22</strong></td>
<td><strong>22 as 24</strong></td>
<td><strong>Feriado:</strong></td>
</tr>
<tr>
<td><?php print "$dia/$mes/$ano";?> </td>
<td><?php print $diasemana;?></td>
<td><?php print $entr_manha;?> </td> 
<td><?php print $saida_manha;?> </td> 
<td><?php print $entr_tarde;?> </td> 
<td><?php print $saida_tarde;?> </td> 
<td><?php print $hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1;?></td>
<td><?php print @$extra;?></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><?php print $feriado?></td>
</tr>
</table>
<?php
}
if ($entr_manha and $saida_manha and $entr_tarde and $saida_tarde <= "20:00:00" and $feriado=="S"){
$hora = 1.5;
$extra = ($hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1) * $hora;
?>
<table border="1">
<tr>
<td><strong>Data:		 </strong></td>
<td><strong>Dia da Semana:</strong></td>
<td><strong>Hora Entrada: </strong></td> 
<td><strong>Hora Saida Almoço: </strong></td> 
<td><strong>Hora Volta Almoço:</strong></td> 
<td><strong>Hora Saida:</strong></td>
<td><strong>Total Geral:</strong></td> 
<td><strong>Total Extras: </strong></td>
<td><strong>24 as 05</strong></td>
<td><strong>18 as 20</strong></td>
<td><strong>20 as 22</strong></td>
<td><strong>22 as 24</strong></td>
<td><strong>Feriado:</strong></td>
</tr>
<tr>
<td><?php print "$dia/$mes/$ano";?> </td>
<td><?php print $diasemana;?></td>
<td><?php print $entr_manha;?> </td> 
<td><?php print $saida_manha;?> </td> 
<td><?php print $entr_tarde;?> </td> 
<td><?php print $saida_tarde;?> </td> 
<td><?php print $hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1;?></td>
<td><?php print @$extra;?></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><?php print $feriado?></td>
</tr>
</table>
<?php
}
?>
<?php
if ($entr_manha and $saida_manha and $entr_tarde and $saida_tarde <= "20:00:00" and $diasemana=="Sábado" or $diasemana=="Domingo"){
$hora = 1.5;
$extra = ($hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1) * $hora;
?>
<table border="1">
<tr>
<td><strong>Data:		 </strong></td>
<td><strong>Dia da Semana:</strong></td>
<td><strong>Hora Entrada: </strong></td> 
<td><strong>Hora Saida Almoço: </strong></td> 
<td><strong>Hora Volta Almoço:</strong></td> 
<td><strong>Hora Saida:</strong></td>
<td><strong>Total Geral:</strong></td> 
<td><strong>Total Extras: </strong></td>
<td><strong>24 as 05</strong></td>
<td><strong>18 as 20</strong></td>
<td><strong>20 as 22</strong></td>
<td><strong>22 as 24</strong></td>
<td><strong>Feriado:</strong></td>
</tr>
<tr>
<td><?php print "$dia/$mes/$ano";?> </td>
<td><?php print $diasemana;?></td>
<td><?php print $entr_manha;?> </td> 
<td><?php print $saida_manha;?> </td> 
<td><?php print $entr_tarde;?> </td> 
<td><?php print $saida_tarde;?> </td> 
<td><?php print $hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1;?></td>
<td><?php print @$extra;?></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><?php print $feriado?></td>
</tr>
</table>
<?php
}
if ($entr_manha and $saida_manha and $entr_tarde and $saida_tarde > "18:00:00" and $feriado=="N" and $diasemana!="Sábado" and $diasemana!="Domingo"){
$horanormal = 1;
$hora = 1.5;
$extra	  = ($hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1) - "08:00:00";
if ($extra>2){ // se quantidade de extra for maior que dois
	$qtdextra   = 2; // extra das 18 as 20 vai ser = 2
	$qtdextra20 = $extra - $qtdextra; // extra das 20 as 22 vai ser igual as quantidade de extras - 2
		if ($qtdextra20>=2){ // se a quantidade de extra for maior ou igual a 2
			$qtdextra20 = 2; // qtdade extra = 2
			$qtdextra22 = $extra - $qtdextra - $qtdextra20; // extra das 22 as 24 vai ser  igual quantidade de extra
		}else{											  // menos a qtd de extra 20 as 22 menos a qtd extra  
			$qtdextra20 = 1;									
			if ($qtdextra22>=2){
				$qtdextra22 = 2;
				$qtdextra24 = $extra - $qtdextra - $qtdextra20 - $qtdextra22;
			}else{
			$qtdextra22 = 0;}	
				$qtdextra05 = $extra - $qtdextra - $qtdextra20 - $qtdextra22;
		}
			}
?>
<table border="1">
<tr>
<td><strong>Data:		 </strong></td>
<td><strong>Dia da Semana:</strong></td>
<td><strong>Hora Entrada: </strong></td> 
<td><strong>Hora Saida Almoço: </strong></td> 
<td><strong>Hora Volta Almoço:</strong></td> 
<td><strong>Hora Saida:</strong></td>
<td><strong>Total Geral:</strong></td> 
<td><strong>Total Extras: </strong></td>
<td><strong>24 as 05</strong></td>
<td><strong>18 as 20</strong></td>
<td><strong>20 as 22</strong></td>
<td><strong>22 as 24</strong></td>
<td><strong>Feriado:</strong></td>
</tr>
<tr>
<td><?php print "$dia/$mes/$ano";?> </td>
<td><?php print $diasemana;?></td>
<td><?php print $entr_manha;?> </td> 
<td><?php print $saida_manha;?> </td> 
<td><?php print $entr_tarde;?> </td> 
<td><?php print $saida_tarde;?> </td> 
<td><?php print $hora_ponto.":".$min_ponto.":".$secs_ponto + $hora_ponto1.":".$min_ponto1.":".$secs_ponto1;?></td>
<td><?php print @$extra;?></td>
<td><?php print @$qtdextra24;?></td>
<td><?php print @$qtdextra;?></td>
<td><?php print @$qtdextra20;?></td>
<td><?php print @$qtdextra22;?></td>
<td><?php print $feriado?></td>
</tr>
</table>
<?php
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE TABLE `dados` (

`id` int(6) NOT NULL auto_increment,

`data` date NOT NULL,

`mes` int(2) default NULL,

`entr_manha` time default NULL,

`saida_manha` time default NULL,

`entr_tarde` time default NULL,

`saida_tarde` time default NULL,

`feriado` varchar(1) default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

/*Data for the table `dados` */

 

insert into `dados` values

 

(1,'2007-11-22',11,'09:00:00','06:00:00','00:00:00','00:00:00','N'),

 

(2,'2007-11-23',11,'09:00:00','12:00:00','13:00:00','24:00:00','N'),

 

(3,'2007-11-19',11,'09:00:00','12:00:00','00:00:00','00:00:00','N'),

 

(4,'2007-11-20',11,'09:00:00','12:00:00','00:00:00','00:00:00','S'),

 

(5,'2007-11-21',11,'09:00:00','12:00:00','13:00:00','20:00:00','N'),

 

(6,'2007-11-24',11,'09:00:00','12:00:00','12:00:00','16:00:00','N'),

 

(7,'2007-11-25',11,'09:00:00','10:00:00','00:00:00','00:00:00','N'),

 

(8,'2007-11-26',11,'09:00:00','12:00:00','13:00:00','22:00:00','N'),

 

(9,'2007-11-27',11,'09:00:00','12:00:00','13:00:00','21:00:00','N'),

 

(10,'2007-11-28',11,'09:00:00','12:00:00','12:00:00','24:00:00','N');

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.