Seleccionar página

Con el fin de disponer de un sistema propio de fichaje para la oficina, he decidido crear una aplicación en Python, desarrollándola íntegramente en Pythonista 3 para iOS, un estupendo IDE que existe en el AppStore y que vale cada céntimo que cuesta :

https://apps.apple.com/es/app/pythonista-3/id1085978097

 

Aunque la aplicación está en una primera fase temprana, incluye funcionalidades tales como :

 

· Fichar horarios de entrada / salida para horarios de mañana y tarde desde tu bolsillo

· Registrar dichos eventos en una base de datos propia en SQLite3

· Exportar los registros de las Tablas de la BBDD en formato CSV

· Llevar un control de las horas totales trabajadas por días y meses.

 

 

 

 

 

Código fichajes.py

import ui
import sqlite3
import dialogs
import csv
import os
from pathlib import Path
from datetime import datetime, timedelta
from console import hud_alert
import pickle as pkl

def create_db():
 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 sql = »’
 CREATE TABLE «fichajes» (
  «dia»   TEXT,
  «mes»   TEXT,
  «hora»  TEXT,
  «turno» TEXT
 )
 »’
 cursor.execute(sql)
 sql = »’
 CREATE TABLE «saldos» (
  «dia»       TEXT,
  «mes»       TEXT,
  «entrada»   TEXT,
  «salida»    TEXT,
  «trabajado» TEXT,
  «turno»     TEXT
 )
 »’
 cursor.execute(sql)
 con.close()

def restar_hora(hora1, hora2):
 formato = «%H:%M»
 h1 = datetime.strptime(hora1,formato)
 h2 = datetime.strptime(hora2,formato)
 resultado = h1 – h2
 return str(resultado)

if Path(‘db/db.db’).is_file():
 print («DB exists»)
else:
 print («DB not exists. Creating new one»)
 create_db()

def create_csv(sender):
 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 sql = »’
 SELECT * FROM «saldos»
 »’
 cursor.execute(sql)
 with open(«fichajes.csv», «w», encoding=’utf-8′) as csv_file:
  csv_writer = csv.writer(csv_file, delimiter=»\t»)
  csv_writer.writerow([i[0] for i in cursor.description])
  csv_writer.writerows(cursor)
  dirpath = os.getcwd() + «/fichajes.csv»
  print(«Datos exportados correctamente en {}».format(dirpath))
con.close()

def salva_vars():
 f = open(‘store.pckl’, ‘wb’)
 pkl.dump([gm,gt], f)
 f.close()
 print(«Vars salvadas»)

if Path(‘store.pckl’).is_file():
 print(«Ya existe el fichero de vars»)
 f = open(‘store.pckl’, ‘rb’)
 gm, gt = pkl.load(f)
 f.close()
else:
 print(«No existe el fichero de vars»)
 gm=»00:00″
 gt=»00:00″
 salva_vars()

print (gm)
print (gt)

def entrada_m(sender):

 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 d = datetime.today()
 hora = datetime.now()
 h = hora.strftime(«%H:%M»)
 sql = »’
 INSERT INTO «fichajes»
 VALUES («{dia}»,»{mes}»,»{time}»,»Mañana»)
 »’.format(dia=d.day, mes=d.month, time=h)
 cursor.execute(sql)
 con.commit()
 con.close()
 global gm
 gm = h
 salva_vars()
 dialogs.alert(«Fichaje Mañana » + h)

def entrada_t(sender):

 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 d = datetime.today()
 hora = datetime.now()
 h = hora.strftime(«%H:%M»)
 sql = »’
 INSERT INTO «fichajes»
 VALUES («{dia}»,»{mes}»,»{time}»,»Tarde»)
 »’.format(dia=d.day, mes=d.month, time=h)
 cursor.execute(sql)
 con.commit()
 con.close()
 global gt
 gt = h
 salva_vars()
 dialogs.alert(«Fichaje Tarde » + h)

def salida_m(sender):
 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 d = datetime.today()
 hora = datetime.now()
 h = hora.strftime(«%H:%M»)
 global gm
 s = restar_hora(h,gm)
 sql = »’
 INSERT INTO «saldos»
 VALUES («{dia}»,»{mes}»,»{entrada}»,»{salida}»,»{trabajado}»,»Mañana»)
 »’.format(dia=d.day, mes=d.month, entrada=gm, salida=h, trabajado=s)
 cursor.execute(sql)
 con.commit()
 con.close()
 dialogs.alert(«Salida Mañana » + h)

def salida_t(sender):
 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 d = datetime.today()
 hora = datetime.now()
 h = hora.strftime(«%H:%M»)
 global gt
 s = restar_hora(h,gt)
 sql = »’
 INSERT INTO «saldos»
 VALUES («{dia}»,»{mes}»,»{entrada}»,»{salida}»,»{trabajado}»,»Tarde»)
 »’.format(dia=d.day, mes=d.month, entrada=gt, salida=h, trabajado=s)
 cursor.execute(sql)
 con.commit()
 con.close()
 dialogs.alert(«Salida Tarde » + h)

def mostrar_reg(sender):

 con = sqlite3.connect(«db/db.db»)
 cursor = con.cursor()
 sql = »’
 SELECT * FROM «fichajes»
 »’

 cursor.execute(sql)

 print(‘*’ * 100)
 for dia, mes, hora, turno in cursor:
  print(f’DIA {dia} | MES {mes} | ENTRADA {hora} | TURNO {turno}’)
  print(‘-‘ * 100)
  print(‘*’ * 100)

 sql = »’
 SELECT * FROM «saldos»
 »’

 cursor.execute(sql)

 print(‘*’ * 100)
 for dia, mes, entrada, salida, trabajado, turno in cursor:
  output = (f’DIA {dia} | MES {mes} | ENTRADA {entrada} | SALIDA {salida} | TRABAJADO      {trabajado} | TURNO {turno}’)
  print(output)
  print(‘-‘ * 100)
  print(‘*’ * 100)
 con.close()

v[‘tv’].text = output

v = ui.load_view()

def fecha_etiqueta():

 fecha = datetime.now()
 v[‘fecha_label’].text = str(fecha.date())

fecha_etiqueta()
v.present(‘sheet’)

Código UI fichajes.pyui

Próximamente