sábado, 3 de setembro de 2011

Horas trabalhadas armazenadas no MySQL

  Esta publicação tem o propósito de armazenar as suas horas trabalhadas. Nada do (argh!) excel. Este script armazena as informações e executa os cálculos.
  É preciso um certo conhecimento do banco de dados MySQL. Qualquer dúvida, consulte Introdução ao banco de dados MySQL.
  Primeiro passo é criar a database:

create database industria;

  Em seguida, cria-se a tabela com as colunas:

create table horarios (id int AUTO_INCREMENT, in1 time, out1 time, in2 time, out2 time, tempo tempo, saldo tempo, dia int(20), mes int(2), ano int(2), comment TEXT, PRIMARY KEY (id));

  Explicando cada coluna:

Coluna Tipo Explicação
id PRIMARY KEY número distinto
in1 time entrada de manhã
out1 time saída de manhã
in2 time entrada à tarde
out2 time saída à tarde
tempo time horas trabalhadas no dia somando manhã e tarde
saldo time saldo de horas
dia int(20) dia trabalhado
mes int(2) mês trabalhado
ano int(2) ano trabalhado
comment TEXT espaço para anotações do tipo "consulta médica" etc

  O banco de dados está pronto.
  Justificando por separar dia, mês e ano. Uma situação comum é fazer o levamento das horas trabalhadas de um determinado mês. Um select do tipo:

select * from horarios where mes=9 and ano=2011;

devolve todas as informações sobre o mês de setembro de 2011.
  A seguir disponibilizo o script que lê as informações introduzidas pelo usuário, executa somas e subtrações de horários e armazena no banco de dados.

#!/bin/bash

# Entrada dos horários
read -p "Entrada manhã: " in1
read -p "Saída almoço: " out1
read -p "Entrada tarde: " in2
read -p "Saída tarde: " out2

read -p "Data de hoje? [Y/n] " resp
# Entende que Y, y, S, s ou Enter signifiquem uma resposta a data de hoje
if [ "$resp" = Y -o "$resp" = y -o "$resp" = S -o "$resp" = s -o ! -n "$resp" ]
  then
   dia=`date +%d`
   mes=`date +%m`
   ano=`date +%Y`
else
  read -p "dia " dia
  read -p "mes " mes
  read -p "ano " ano
fi

read -p "Comentário? " comment

# Subtrai o horário da manhã
manhaSQL=`mysql -uroot -psenha << SQL
SELECT SUBTIME('$out1','$in1');
QUIT
SQL`

# Filtra a resposta anterior ficando apenas um valor do tipo HH:MM:SS
manha=`echo $manhaSQL | awk '{printf "%s\n",$2}'`

# Subtrai o horário da tarde
tardeSQL=`mysql -uroot -psenha << SQL
SELECT SUBTIME('$out2','$in2');
QUIT
SQL`

# Filtra a resposta anterior ficando apenas um valor do tipo HH:MM:SS
tarde=`echo $tardeSQL | awk '{printf "%s\n",$2}'`


# Soma o horário da manhã e da tarde
tempoSQL=`mysql -uroot -psenha << SQL
SELECT ADDTIME('$manha','$tarde');
QUIT
SQL`

# Filtra a resposta anterior ficando apenas um valor do tipo HH:MM:SS
# Tempo total do dia (manhã + tarde)
tempo=`echo $tempoSQL | awk '{printf "%s\n",$2}'`

# Horas trabalhadas menos 9h para calcular o saldo de horas
tempo_add=`mysql -uroot -psenha << SQL
SELECT SUBTIME('$tempo','09:00:00');
QUIT
SQL`

# saldo de horas trabalhadas
saldo_horas=`echo $tempo_add | awk '{printf "%s\n",$2}'`

# insere no banco de dados os valores armazenados nas variaveis
cmd=`/usr/bin/mysql -uroot -psenha << SQL
  use industria
  insert into horarios (in1, out1, in2, out2, tempo, saldo, dia, mes, ano, comment) values
    ("$in1", "$out1", "$in2", "$out2", "$tempo", "$saldo_horas", "$dia", "$mes", "$ano", "$comment");
  quit
  SQL`

Nenhum comentário:

Postar um comentário