Código: Seleccionar todo
; ==========================================================================================
; AGRADEZCO ENORMEMENTE LAS APORTACIONES QUE TODOS LOS USUARIOS DEL FORO DE AUTOIT REALIZAN.
; SIN ELLAS ESTE PROGRAMA NO HUBIERA SIDO POSIBLE
; ==========================================================================================
;======================================================================================================
; QBITA IP V.1.0
; Autor: quinux
; email: [email protected]
; Descripcion: Mediante este programa el usuario podrá realizar un control del tiempo que emplea en
; cada tarea. Es una especie de Bitácora
;======================================================================================================
#include <SQLite.au3>
#include <SQLite.dll.au3>
#Include <Constants.au3>
#include <Date.au3>
#include <GuiConstantsEx.au3>
#Include <GuiListView.au3>
#NoTrayIcon
$g_nombre_bbdd = "bitacora.db"
Local $hQuery, $aRow, $aNames
Global $g_bbdd
Global $gDia = 0, $gMes = 0, $gAno = 0, $gHora = 0, $gMinuto = 0
Global $gNombreFichero = "bitacora.txt"
HotKeySet("+!i", "pMostrar")
_SQLite_Startup()
if crearBBDD() = 0 Then
$g_bbdd=_SQLite_Open($g_nombre_bbdd)
EndIf
Opt("TrayMenuMode",1)
$g_insertar_registro = TrayCreateItem("Insertar registro")
$g_consultar_bitacora = TrayCreateItem("Consultar registros")
TrayCreateItem("")
$g_acerca_de = TrayCreateItem("Acerca de ...")
TrayCreateItem("")
$g_salir = TrayCreateItem("Salir")
TraySetState()
TraySetState()
TraySetToolTip("Tarea activa: " & dameDatosTareaActiva("observacion") & @CR & "Comenzada el: " & dameDatosTareaActiva("fecha_inicio") & " a las " & dameDatosTareaActiva("hora_inicio"))
TraySetIcon("qbita.ico")
While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $g_insertar_registro
insertarRegistro()
Case $msg = $g_consultar_bitacora
consultarBitacora()
Case $msg = $g_acerca_de
Msgbox(64,"Acerca de ...","QBITA V 1.0" & @CRLF & "Realizado por Fernando García" & @CRLF & "Mail: [email protected]" )
Case $msg = $g_salir
; Cerramos la tarea que se encuentre activa
actualizarTareaActiva(@MDAY & "/" & @MON & "/" & @YEAR,@HOUR & ":" & @MIN,dameContador(),dameTiempo())
ExitLoop
EndSelect
WEnd
GUIDelete()
_SQLite_Shutdown ()
Exit
; ====================================================================================================================
; Name...........: crearBBDD()
; Description ...: Controla si la BBDD está existe, sino existe la crea
; Syntax.........:
; Parameters ....:
; Return values .: 1, 0
; Author ........: Fernando Garcia
; Remarks .......: Devuelve 1 si la BBDD no está creada y es creada en el momento
; Devuelve 0 si la BBDD está creada
; ====================================================================================================================
Func crearBBDD()
If NOT FileExists($g_nombre_bbdd) Then ; chequeamos si existe la base de datos, si no existe se crea
$g_bbdd =_SQLite_Open($g_nombre_bbdd)
_SQLite_Exec($g_bbdd,"CREATE TABLE t_bitacora(contador INTEGER,fecha_inicio DATE,hora_inicio TIME,fecha_fin DATE,hora_fin TIME,tiempo INTEGER,observacion varchar(500),PRIMARY KEY (contador));")
;_SQLite_Exec($g_bbdd,"INSERT into t_bitacora values ('1','13/10/10','12:52','01/01/1000','0:00',0,'hola');");
Return 1
Else
Return 0
EndIf
EndFunc
; ====================================================================================================================
; Name...........: insertarRegistro()
; Description ...: Muestra un cuadro de diálogo para que el usuario inserte una nueva tarea, la inserta si el usuario
; pulsa guardar y cierra la tarea que hubiera abierta.
; Syntax.........:
; Parameters ....:
; Return values .:
; Author ........: Fernando Garcia
; Remarks .......:
; ====================================================================================================================
Func insertarRegistro()
Local $v_msg
Local $v_ventana,$v_boton_cancelar,$v_etiqueta_descripcion,$v_texto_descripcion ,$v_etiqueta_tarea_actual, $v_descricion_tarea_actual, $v_hora_inicio_tarea_actual
Local $v_boton_guardar, $v_boton_cancelar, $v_fecha_inicio_tarea_atual
Local $v_etiqueta_fecha_ta,$v_etiqueta_hora_ta
Local $v_contador
Local $v_fecha_actual,$v_hora_actual
$v_ventana = GUICreate("Datos para la nueva tarea", 400, 200)
GuiSetIcon("qbita.ico")
$v_etiqueta_tarea_actual=GuiCtrlCreateLabel("Tarea actual: ", 30, 20, 300, 40)
$v_descripcion_tarea_actual = GuiCtrlCreateLabel(dameDatosTareaActiva("observacion"), 100, 20, 100, 40)
GUICtrlSetColor($v_descripcion_tarea_actual,0xffF000)
$v_etiqueta_fecha_ta=GuiCtrlCreateLabel("Comenzada el día: ", 30, 50, 100, 40)
$v_fecha_inicio_tarea_actual = GUICtrlCreateLabel(dameDatosTareaActiva("fecha_inicio"),125,50,60)
GUICtrlSetColor($v_fecha_inicio_tarea_actual,0xffF000)
$v_etiqueta_hora_ta=GuiCtrlCreateLabel("a las ", 190, 50, 100, 40)
$v_hora_inicio_tarea_actual = GUICtrlCreateLabel(dameDatosTareaActiva("hora_inicio"),215,50,60)
GUICtrlSetColor($v_hora_inicio_tarea_actual,0XFFF000)
$v_etiqueta_descripcion=GuiCtrlCreateLabel("Tarea: ", 30, 80, 100, 40)
$v_texto_descripcion = GuiCtrlCreateEdit("", 70, 80, 300, 70)
$v_boton_guardar = GUICtrlCreateButton("Guardar", 220, 170, 70, 20)
$v_boton_cancelar = GUICtrlCreateButton("Cancel", 300, 170, 70, 20)
GUISetState()
While 1
$v_msg = GUIGetMsg()
Select
Case $v_msg = $v_boton_cancelar ;Or $v_msg = $cancelbutton
ExitLoop
case $v_msg = $v_boton_guardar
; Nos quedamos con el día, mes, año, hora y minutos actuales con los que cerraremos y abriremos la siguiente tarea
$vTiempo = dameTiempo()
; Obtenemos la primary key del último registro
$v_contador = dameContador()
; Las variables globales han sido actualizadas dentro de la función dameTiempo
$v_fecha_actual = $gDia & "/" & $gMes & "/" & $gAno
$v_hora_actual = $gHora & ":" & $gMinuto
actualizarTareaActiva($v_fecha_actual,$v_hora_actual,$v_contador,$vTiempo)
; Ahora insertamos la nueva tarea
$v_contador = $v_contador + 1
_SQLite_Exec($g_bbdd,"INSERT into t_bitacora values (" & $v_contador & "," & "'" & $v_fecha_actual & "'" & "," & "'" & $v_hora_actual & "'" & ",'','', 0," & "'" & GUICtrlRead($v_texto_descripcion) & "'" & ");");
if @error Then
MsgBox(0,"ERROR","Se ha producido un error al actualizar el ini. consulte con el administrador")
Else
; Actualizamos el display dónde aparece la tarea activa
GUICtrlSetData($v_descripcion_tarea_actual,GUICtrlRead($v_texto_descripcion))
Guictrlsetdata($v_fecha_inicio_tarea_actual,$v_fecha_actual)
Guictrlsetdata($v_hora_inicio_tarea_actual,$v_hora_actual)
TraySetToolTip("Tarea activa: " & dameDatosTareaActiva("observacion") & @CR & "Comenzada el: " & dameDatosTareaActiva("fecha_inicio") & " a las " & dameDatosTareaActiva("hora_inicio"))
ExitLoop
EndIf
EndSelect
WEnd
GUIDelete()
EndFunc
; ====================================================================================================================
; Name...........: dameContador()
; Description ...: Nos devuelve la primary key del último registro insertado en la tabla
; Syntax.........:
; Parameters ....:
; Return values .: 0, si la tabla no tiene registros y si tiene devuelve el valor de su primary key
; Author ........: Fernando Garcia
; Remarks .......:
; ====================================================================================================================
Func dameContador()
Local $vContador = 0
_SQlite_Query ($g_bbdd, "SELECT max(contador) FROM t_bitacora;", $hQuery) ; the query
While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
$vContador = $aRow[0]
WEnd
return $vContador
EndFunc
; ====================================================================================================================
; Name...........: dameDatosTareaActiva()
; Description ...: Devuelve el contenido de un campo pasado como parámetro del último registro de la tabla
; Syntax.........:
; Parameters ....: $pColumna --> Nombre del campo de la tabla del cual queremos obtener el contenido
; Return values .: Devuelve el valor del campo de la tabla o ""
; Author ........: Fernando Garcia
; Remarks .......:
; ====================================================================================================================
Func dameDatosTareaActiva($pColumna)
Local $vDato = ""
_SQlite_Query ($g_bbdd, "SELECT " & $pColumna & " FROM t_bitacora WHERE contador = " & dameContador() & " and fecha_fin = '';", $hQuery) ; the query
While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
$vDato = $aRow[0]
WEnd
return $vDato
EndFunc
; ====================================================================================================================
; Name...........: actualizarTareaActiva()
; Description ...: Actualiza la tarea que esté activa en el momento de llamar al procedimiento
; Syntax.........:
; Parameters ....: $pFechaActual --> Fecha actual
; $pHoraActual --> Hora actual
; $pContador --> primary key del registro a actualizar
; $pTiempo --> Tiempo total que ha estado la tarea activa
; Return values .:
; Author ........: Fernando Garcia
; Remarks .......:
; ====================================================================================================================
Func actualizarTareaActiva($pFechaActual,$pHoraActual,$pContador,$pTiempo)
_SQLite_Exec($g_bbdd,"UPDATE t_bitacora set tiempo = " & $pTiempo & ", fecha_fin = " & "'" & $pFechaActual & "'" & ", hora_fin = " & "'" & $pHoraActual & "'" & " where contador = " & $pContador & " and fecha_fin = '';")
EndFunc
; ====================================================================================================================
; Name...........: consultarBitacora()
; Description ...: Muestra un cuadro de diálogo para que el usuario seleccione el rango de fechas a consultar de las
; tareas. Posteriormente este procedimiento llama mostrarConsulta
; Syntax.........:
; Parameters ....:
; Return values .:
; Author ........: Fernando Garcia
; Remarks .......:
; ====================================================================================================================
Func consultarBitacora()
Local $vDesdeFecha, $vHastaFecha, $vVentana
Local $labelDesdeFecha, $labelHastaFecha
Local $vBotonMostrar, $vBotonCancelar
Local $vMsg, $vFormatoFecha, $vEstilo
$vVentana = GUICreate("Seleccione intervalo de fechas", 300, 100)
GuiSetIcon("qbita.ico")
$labelDesdeFecha = GuiCtrlCreateLabel("Desde fecha: ", 10, 9, 80, 40)
$vDesdeFecha = GuiCtrlCreateDate("", 90, 10, 100, 20)
$labelHastaFecha = GuiCtrlCreateLabel("Hasta fecha: ", 10, 39, 80, 40)
$vHastaFecha = GuiCtrlCreateDate("", 90, 40, 100, 20)
$vFormatoFecha = 0x1032
$vEstilo = "dd/MM/yyyy"
GUICtrlSendMsg($vDesdeFecha, $vFormatoFecha, 0, $vEstilo)
GUICtrlSendMsg($vHastaFecha, $vFormatoFecha, 0, $vEstilo)
$vBotonMostrar = GUICtrlCreateButton("Mostrar", 150, 70, 70, 20)
$vBotonCancelar = GUICtrlCreateButton("Cancelar", 220, 70, 70, 20)
GUISetState()
While 1
$vMsg = GUIGetMsg()
Select
Case $vMsg = $vBotonMostrar
mostrarConsulta(GUICtrlRead($vDesdeFecha),GUICtrlRead($vHastaFecha))
Case $vMsg = $vBotonCancelar ;Or $v_msg = $cancelbutton
ExitLoop
Case $vMsg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEnd
GUIDelete()
EndFunc
; ====================================================================================================================
; Name...........: mostrarConsulta()
; Description ...: Muestra en una rejilla de datos las tareas realizadas en el rango de fechas pasado como parámetro
; Syntax.........:
; Parameters ....: $pDesdeFecha --> Fecha inicio
; $pHastaFecha --> Fecha fin
; Return values .:
; Author ........: Fernando Garcia
; Remarks .......: El rango de fechas solo se aplica a la fecha de inicio de la tarea, es decir, siempre se consultan
; tareas cuya fecha de inicio se encuentre en el rango dado
; ====================================================================================================================
Func mostrarConsulta($pDesdeFecha,$pHastaFecha)
Local $vDesdeFecha, $vHastaFecha, $vVentana
Local $labelDesdeFecha, $labelHastaFecha
Local $vBotonMostrar, $vBotonSalir,$vRejillaDatos,$vExportarDatos
Local $vTiempo, $vMsg
$vVentana = GUICreate("", 500, 700)
GuiSetIcon("qbita.ico")
$vRejillaDatos = GuiCtrlCreateListView("Tarea |Fecha Ini|Hora Ini|Fecha Fin|Hora Fin| Tiempo total", 10, 10, 480, 650)
_SQlite_Query ($g_bbdd, "SELECT observacion,fecha_inicio,hora_inicio,fecha_fin,hora_fin,tiempo FROM t_bitacora where fecha_inicio between " & "'" & $pDesdeFecha & "'" & " and " & "'" & $pHastaFecha & "'" & " ORDER BY contador;", $hQuery)
_SQLite_FetchNames ($hQuery, $aNames)
While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
GUICtrlCreateListViewItem($aRow[0] & "|" & $aRow[1] & "|" & $aRow[2] & "|" & $aRow[3] & "|" & $aRow[4] & "|" & $aRow[5],$vRejillaDatos)
WEnd
$vBotonCancelar = GUICtrlCreateButton("Salir", 420, 670, 70, 20)
$vExportarDatos = GUICtrlCreateButton("Exportar",350,670,70,20)
GUISetState()
While 1
$vMsg = GUIGetMsg()
Select
Case $vMsg = $vExportarDatos
exportarDatosRejilla($vRejillaDatos)
Case $vMsg = $vBotonCancelar ;Or $v_msg = $cancelbutton
ExitLoop
EndSelect
WEnd
GUIDelete()
EndFunc
; ====================================================================================================================
; Name...........: dameTiempo()
; Description ...: Calcula el tiempo
; Syntax.........:
; Parameters ....:
; Return values .: valor en minutos
; Author ........: Fernando Garcia
; Remarks .......: De momento no calcula el tiempo empleado en varios días ya que hemos tomado como precondición que
; siempre que el programa se cierre se cerrará la tarea activa
; ====================================================================================================================
Func dameTiempo()
Local $vDia = 0, $vMes = 0, $vAno = 0, $vHora = 0, $vMinuto = 0
$vDia = @MDAY
$vMes = @MON
$vAno = @YEAR
$vHora = @HOUR
$vMinuto = @MIN
$vTiempo = 0
;Calculamos el tiempo en minutos que ha estado la tarea abierta
$vTiempo =((($vHora - $gHora) * 60) + ($vMinuto - $gMinuto))
; Actualizamos la fecha y hora de fin de la última entrada
$gDia = $vDia
$gMes = $vMes
$gAno = $vAno
$gHora = $vHora
$gMInuto = $vMinuto
return $vTiempo
EndFunc
; ====================================================================================================================
; Name...........: exportarDatosRejilla()
; Description ...: Exporta los datos de una rejilla a un fichero .txt
; Syntax.........:
; Parameters ....: $pRejillaDatos --> Puntero a la rejilla de datos creada previamente en cualquier otro procedimiento
; Return values .:
; Author ........: Fernando Garcia
; Remarks .......:
; ====================================================================================================================
Func exportarDatosRejilla(ByRef $pRejillaDatos)
Local $vI, $vJ
Local $vDirectorioDestino,$vFicheroDestino
Local $vLinea = ""
Local $vArray
$vDirectorioDestino = FileSelectFolder("Seleccione el directorio de destino","",2)
$vFicheroDestino = FileOpen($vDirectorioDestino & "\" & $gNombreFichero, 2)
; Check if file opened for writing OK
If $vFicheroDestino = -1 Then
MsgBox(0, "Error", "Imposible crear el fichero")
Exit
Else
If $vFicheroDestino <> "" Then
; Insertamos la cabecera de las columnas separadas por |
For $vI = 0 to (_GUICtrlListView_GetColumnCount($pRejillaDatos) - 1) step 1
$vArray = _GUICtrlListView_GetColumn($pRejillaDatos,$vI)
$vLinea = $vLinea & $vArray[5]
If $vI < (_GUICtrlListView_GetColumnCount($pRejillaDatos) - 1) Then
$vLinea = $vLinea & "|"
EndIf
Next
FileWriteLine($vFicheroDestino,$vLinea)
$vLinea = ""
For $vI = 0 to (_GUICtrlListView_GetItemCount($pRejillaDatos) - 1) Step 1
$vLinea = ""
For $vJ = 0 to (_GUICtrlListView_GetColumnCount($pRejillaDatos) - 1) Step 1
$vLinea = $vLinea & _GUICtrlListView_GetItemText($pRejillaDatos,$vI,$vJ)
If $vJ < (_GUICtrlListView_GetColumnCount($pRejillaDatos) - 1) Then
$vLinea = $vLinea & "|"
EndIf
Next
FileWriteLine($vFicheroDestino,$vLinea)
Next
FileClose($vFicheroDestino)
MsgBox(64,"PROCESO FINALIZADO","La exportación del fichero " & $gNombreFichero & " en el directorio " & $vDirectorioDestino & " ha sido finalizada")
EndIf
EndIf
EndFunc
Func pMostrar()
insertarRegistro()
EndFunc