Saludos amigos, resulta que estoy haciendo un modulo para controlar la asistencia de docentes en un Centro Pre Universitario, este modulo permitirá calcular los salarios de dichos docentes.
Tengo una tabla con los horarios del Docente:
Código SQL
[-]CREATE TABLE `horario` (
`id_horario` int(11) NOT NULL,
`iddocente_fk` int(11) DEFAULT NULL,
`idcurso_fk` int(11) DEFAULT NULL,
`id_dia` smallint(6) DEFAULT NULL,
`hora_ini` time DEFAULT NULL,
`hora_fin` time DEFAULT NULL,
PRIMARY KEY (`id_horario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Y Tengo una tabla para registrar las asistencias de los docentes:
Código SQL
[-]CREATE TABLE `doc_asistencia` (
`id_asistdocente` int(11) NOT NULL,
`iddocenteOrig_fk` int(11) DEFAULT NULL,
`iddocenteReemplazante_fk` int(11) DEFAULT NULL,
`idcurso_fk` int(11) DEFAULT NULL,
`fecha` date DEFAULT NULL,
`nombreDia` varchar(15) DEFAULT NULL,
`hora_entrada` time DEFAULT NULL,
`hora_salida` time DEFAULT NULL,
`mindif_entrada` int(11) DEFAULT NULL,
`mindif_salida` int(11) DEFAULT NULL,
PRIMARY KEY (`id_asistdocente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Como puede verse aqui: Necesito grabar la hora de entrada tomando la hora del equipo y calcular la diferencia en minutos de la hora tomada del sistema con la hora de inicio de su horario, ejemplo:
Hora del Sistema: 14:02:00
Hora de Inicio Horario Docente: 14:00:00
La rutina debería arrojar -2 min (negativo) dado que se esta registrando pasados dos minutos de su hora de ingreso. Mientras que:
Hora del Sistema: 13:57:00
Hora de Inicio Horario Docente: 14:00:00
La rutina debería arrojar 3 min (positivo).
Intente usando la función HourSpan() pero no arroja el valor negativo como deseo: Aqui les muestro mi rompecabezas de codigo:
Código Delphi
[-]procedure TfrmAsistDocentes.lstHorarioActivoClick(Sender: TObject);
var
horaIni, horaFin, horaActual: string;
posPunto, difMinutos:integer;
begin
if lstHorarioActivo.ItemIndex<>-1 then
begin
posPunto:=pos('.',lstHorarioActivo.Items[lstHorarioActivo.ItemIndex]);
idHorarioSelected:=StrToInt(Copy(lstHorarioActivo.Items[lstHorarioActivo.ItemIndex],0,posPunto-1));
dm.q_HorarioXID.Close;
dm.q_HorarioXID.Params[0].AsInteger:=idHorarioSelected;
dm.q_HorarioXID.Open;
if(length(dm.q_HorarioXID.FieldByName('hora_ini').AsString)>0)then
begin
horaIni:=dm.q_HorarioXID.FieldByName('hora_ini').AsString;
horaFin:=dm.q_HorarioXID.FieldByName('hora_fin').AsString;
horaActual:=TimeToStr(Now);
difMinutos:=HourSpan(StrToTime(horaActual),StrToTime(horaIni));
if difMinutos>=0 then
lblDifMinutos.Font.Color:=clBlue
else
lblDifMinutos.Font.Color:=clRed;
lblDifMinutos.Caption:=IntToStr(difMinutos) + ' min.';
if difMinutos>5 then
btnRegistrarAsistDoc.Enabled:=False
else
btnRegistrarAsistDoc.Enabled:=True;
end;
end;
end;
Les agradecería mucho apoyo con este problema, pues ya me quede sin ideas.
Un Abrazo