Página 1 de 1

Control de tiempos de actividades o clientes

Publicado: 10 Ago 2012, 13:16
por BasicOs
Programa muy sencillo sin buscar diseño, solo para controlar las actividades que haces durante el día o el tiempo que inviertes en los clientes.
El tiempo vuela!!!

Graba los tiempos que dedicamos a diferentes actividades en un fichero texto, y gestiona los clientes en el INI.
Y a nivel de ejemplo incluye como usar sencillamente una base de datos sqlite con sintaxis SQL.
Puedes elegir los clientes/actividades del listado, o bien crear nuevos escribiendolos en el texto.

Llamadas al menu:

Alt+Mayusculas+t activar el interface
Alt+Mayusculas+y para el contador.
los ficheros aquí (exe fuente icono y fichero.ini):
https://docs.google.com/folder/d/0Bxrdw ... 0tZ00/edit

Código: Seleccionar todo

;Creditos Basicos Autoit.es
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=controltiempos.ico
#AutoIt3Wrapper_outfile=controltiempos.exe
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Comment=Control tiempos basicos
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <file.au3>
#include <Misc.au3>

#include <sqlite.au3>
#include <sqlite.dll.au3>
Local $hQuery, $aRow, $noexistedb
If Not FileExists("controtiempos") Then $noexistedb = 1
_SQLite_Startup()
_SQLite_Open("controltiempos.sq")
If FileExists("borra.txt") Then _SQLite_Exec(-1, "DROP TABLE movimientos;") ;borra la tabla
If $noexistedb Or FileExists("borra.txt") Then _SQLite_Exec(-1, "CREATE TABLE movimientos (hora,cliente,concepto,tarea,segundos);")


OnAutoItExitRegister("Salir")
HotKeySet("!+t", "Pon")
HotKeySet("!+y", "Para")
HotKeySet("!+u", "ToolTipon")
If IniRead("ControlTiempos.ini", "CONFIG", "clientes", "fallo") = "fallo" Then IniWrite("ControlTiempos.ini", "CONFIG", "clientes", "")
If IniRead("ControlTiempos.ini", "CONFIG", "conceptos", "fallo") = "fallo" Then IniWrite("ControlTiempos.ini", "CONFIG", "conceptos", "")
If IniRead("ControlTiempos.ini", "CONFIG", "tareas", "fallo") = "fallo" Then IniWrite("ControlTiempos.ini", "CONFIG", "tareas", "")
Global $cliente = "", $tarea, $concepto, $segundos = 0, $timeron = "", $tooltipon = 1

$clientes = IniRead("ControlTiempos.ini", "CONFIG", "clientes", "fallo")
$conceptos = IniRead("ControlTiempos.ini", "CONFIG", "tareas", "fallo")
$tareas = IniRead("ControlTiempos.ini", "CONFIG", "tareas", "fallo")

Interface()

While 1
	If $tooltipon Then ToolTip($cliente & "-" & Int($segundos / 60) & ":" & $segundos - (Int($segundos / 60) * 60), 200, 0)
	Sleep(1000)
	$segundos = $segundos + 1
WEnd

Func ToolTipon()
	$tooltipon = _Iif($tooltipon, 0, 1)
EndFunc   ;==>ToolTipon

Func Pon()
	$wcliente = $cliente
	;$cliente = InputBox("Cliente", "Que cliente activamos? Nombre corto o Nick, FIN para cerrar")
	Interface()
	_FileWriteLog(@ScriptDir & "\milog.txt", "," & $cliente & "," & $timeron & "," & "ON")
	If $cliente <> $wcliente Or $cliente = "FIN" Then
		GrabarMovi()
		$segundos = 0
		If $cliente = "FIN" Then Exit
	EndIf
EndFunc   ;==>Pon

Func Para()
	_FileWriteLog(@ScriptDir & "\milog.txt", "," & $cliente & "," & $timeron & "," & "STOP")
	MsgBox(0, "Tiempos de clientes", "Aceptar para seguir contando")
	_FileWriteLog(@ScriptDir & "\milog.txt", "," & $cliente & "," & $timeron & "," & "ON")
EndFunc   ;==>Para

Func Interface()
	#region ### START Koda GUI section ### Form=
	$Form1_1 = GUICreate("Tiempos de Clientes", 599, 128, 144, 132)
	$Input1 = GUICtrlCreateInput("", 296, 8, 137, 21)
	$Label1 = GUICtrlCreateLabel("CLIENTE:", 8, 8, 60, 17)
	$Combo1 = GUICtrlCreateCombo("GRL", 80, 8, 201, 25)
	GUICtrlSetData(-1, StringReplace($clientes, ",", "|"), "GRL"); StringRight($clientes, StringInStr($clientes, ",", 0, -1) - 1)
	$Group1 = GUICtrlCreateGroup("Datos del trabajo", 8, 32, 433, 81)
	$Input2 = GUICtrlCreateInput("", 296, 53, 137, 21)
	$Label2 = GUICtrlCreateLabel("CONCEPTO:", 16, 53, 74, 17)
	$Combo2 = GUICtrlCreateCombo("GRL", 96, 53, 185, 25)
	GUICtrlSetData(-1, StringReplace($conceptos, ",", "|"), "GRL")
	GUICtrlSetData(-1, "")
	$Input3 = GUICtrlCreateInput("", 296, 77, 137, 21)
	$Label3 = GUICtrlCreateLabel("TAREA:", 16, 85, 59, 17)
	$Combo3 = GUICtrlCreateCombo("GRL", 96, 77, 185, 25)
	GUICtrlSetData(-1, StringReplace($tareas, ",", "|"), "GRL")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Button1 = GUICtrlCreateButton("Activar", 448, 8, 73, 97, $WS_GROUP)
	$Button2 = GUICtrlCreateButton("Salir", 556, 93, 33, 25, $WS_GROUP)
	$Button3 = GUICtrlCreateButton("&Ver tabla", 536, 8, 57, 57, $WS_GROUP)
	GUISetState(@SW_SHOW)
	#endregion ### END Koda GUI section ###


	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $Button1
				$texto1 = GUICtrlRead($Input1, 1)
				$texto2 = GUICtrlRead($Input2, 1)
				$texto3 = GUICtrlRead($Input3, 1)
				$elcombo1 = GUICtrlRead($Combo1, 1)
				$elcombo2 = GUICtrlRead($Combo3, 1)
				$elcombo3 = GUICtrlRead($Combo3, 1)
				$cliente = _Iif($texto1, $texto1, $elcombo1)
				If $texto1 <> "" Then IniWrite("ControlTiempos.ini", "CONFIG", "clientes", IniRead("ControlTiempos.ini", "CONFIG", "clientes", "") & "," & $texto1)
				$concepto = _Iif($texto2, $texto2, $elcombo3)
				If $texto2 <> "" Then IniWrite("ControlTiempos.ini", "CONFIG", "conceptos", IniRead("ControlTiempos.ini", "CONFIG", "conceptos", "") & "," & $texto2)
				$tarea = _Iif($texto3, $texto3, $elcombo3)
				If $texto3 <> "" Then IniWrite("ControlTiempos.ini", "CONFIG", "tareas", IniRead("ControlTiempos.ini", "CONFIG", "tareas", "") & "," & $texto3)
				GUICtrlSetData($Button1, _Iif(GUICtrlRead($Button1, 1) = "&Activar", "Activado", "&Activar"))
				MsgBox(0, "Gestión de Clientes", $cliente & " " & $concepto & " " & $tarea & " está activado", 5)
				ExitLoop
			Case $Button2
				$cliente = "FIN"
				ExitLoop
			Case $Button3
				Local $aResult, $iRows, $iColumns, $iRval
				$iRval = _SQLite_GetTable2d(-1, "SELECT * FROM movimientos;", $aResult, $iRows, $iColumns)
				If $iRval = $SQLITE_OK Then
					_SQLite_Display2DResult($aResult)
					_ArrayDisplay($aResult)
				Else
					MsgBox(16, "SQLite Error: " & $iRval, _SQLite_ErrMsg())
				EndIf
		EndSwitch
	WEnd
	GUIDelete()
	Return
EndFunc   ;==>Interface

Func GrabarMovi()
	$grabando = $cliente & "," & $tarea & "," & $concepto & "," & String(Int($segundos / 60) & ":" & $segundos - (Int($segundos / 60) * 60) & "," & $segundos)
	FileWrite(@ScriptDir & "\movimientos.txt", @HOUR & ":" & @MIN & ":" & @SEC & "," & $grabando)
	_SQLite_Exec(-1, "Insert into movimientos(hora,cliente,concepto,tarea,segundos) VALUES ('" & @HOUR & ":" & @MIN & ":" & @SEC & "','" & $cliente & "','" & $concepto & "','" & $tarea & "'," & $segundos & ");")
	_FileWriteLog(@ScriptDir & "\milog.txt", "," & $grabando & "," & "GRABA")
EndFunc   ;==>GrabarMovi

Func Salir()
	_SQLite_Close()
	_SQLite_Shutdown()
	Exit
EndFunc   ;==>Salir
Cualquier sugerencia bienvenida.
Los datos de los ficheros se pueden abrir/importar en una hoja de calculo y ordenarlos o gestionarlos por fechas o por clientes, etc...
Salu22:)