basic calculations on time, figuring hours clocked

This commit is contained in:
Mikayla Dobson
2022-04-06 16:05:09 -05:00
parent a758526bfc
commit a75bff67cf
5 changed files with 99 additions and 37 deletions

BIN
data.db

Binary file not shown.

View File

@@ -1,6 +1,6 @@
import sqlite3 import sqlite3
from user_input import * from user_input import *
from datetime import datetime from datetime import datetime, timedelta
# establish a connection to a .db file and create a cursor object # establish a connection to a .db file and create a cursor object
con = sqlite3.connect('data.db') con = sqlite3.connect('data.db')
@@ -50,12 +50,14 @@ def get_table_length():
table_rows.append(row) table_rows.append(row)
return len(table_rows) return len(table_rows)
def get_stamp_by_date():
pass
def get_weekly_hours(): def get_weekly_hours():
pass current_time = datetime.now()
minus_week = current_time - timedelta(days = 7)
return cur.execute("""
SELECT time_in, time_out FROM TIMESTAMPS
WHERE time_in>:minus_week
""", {"minus_week": minus_week})
def get_all_hours(): def get_all_hours():
pass pass

View File

@@ -1,4 +1,4 @@
from datetime import datetime from datetime import datetime, timedelta
from time import time from time import time
timestamp1 = "Feb 12 08:02:32 2014" timestamp1 = "Feb 12 08:02:32 2014"
@@ -7,17 +7,21 @@ timestamp2 = "Feb 21 11:52:02 2014"
converted1 = datetime.strptime(timestamp1, "%b %d %H:%M:%S %Y") converted1 = datetime.strptime(timestamp1, "%b %d %H:%M:%S %Y")
converted2 = datetime.strptime(timestamp2, "%b %d %H:%M:%S %Y") converted2 = datetime.strptime(timestamp2, "%b %d %H:%M:%S %Y")
# print(converted1)
# print(converted2)
# difference = converted2 - converted1
# days_extracted = difference.days
# print(difference)
# def days_to_minutes(days):
# hours = days * 24
# minutes = hours * 60
# return minutes
# print(days_to_minutes(days_extracted))
print(converted1) print(converted1)
print(converted2) print(converted1 - timedelta(days=7))
difference = converted2 - converted1
days_extracted = difference.days
print(difference)
def days_to_minutes(days):
hours = days * 24
minutes = hours * 60
return minutes
print(days_to_minutes(days_extracted))

View File

@@ -1,4 +1,8 @@
from user_input import * from user_input import *
from database import * from database import *
print("""
Welcome to the personal time stamp program.
This program is intended to help you keep track of your work hours on personal projects.""")
parse_input() parse_input()

View File

@@ -1,19 +1,19 @@
from database import * from database import *
from datetime import * from datetime import *
user_prompt = """ # String format for datetime string
Welcome to the personal time stamp program. # "%Y-%m-%d %H:%M:%S.%f"
This program is intended to help you keep track of your work hours on personal projects.
user_prompt = """
Please choose from the following options: Please choose from the following options:
1) Insert a new timestamp 1) New time punch
2) Select all timestamps (option: limit number of results) 2) Select all timestamps (option: limit number of results)
3) Find a timestamp by session id 3) Find a timestamp by session id
4) Calculate total hours for the week 4) Calculate total hours for the week
5) Calculate complete sum of hours 5) Calculate complete sum of hours
""" """
# Inner functions detailed below: # New time punch:
def handle_first_option(): def handle_first_option():
in_out = input("Punching in or out? i/o \n") in_out = input("Punching in or out? i/o \n")
@@ -23,8 +23,7 @@ def handle_first_option():
print("Please enter the following details:") print("Please enter the following details:")
name = input("Your name: ") name = input("Your name: ")
purpose = input("Current task: ") purpose = input("Current task: ")
print("Please confirm your details:")
print("\nPlease confirm your details:")
confirmation = input(f'{name} clocking in at {time_of_stamp} for {purpose}. Confirm? y/n ') confirmation = input(f'{name} clocking in at {time_of_stamp} for {purpose}. Confirm? y/n ')
if confirmation == 'n': if confirmation == 'n':
@@ -48,7 +47,7 @@ def handle_first_option():
elif in_out == 'o': elif in_out == 'o':
time_of_stamp = datetime.now() time_of_stamp = datetime.now()
print("Preparing to punch out.") print("Preparing to punch out.")
session = input("Please provide your session ID." ) session = input("Please provide your session ID: ")
punch_out(time_of_stamp, session) punch_out(time_of_stamp, session)
print("Punch out successful. Returning...") print("Punch out successful. Returning...")
parse_input() parse_input()
@@ -56,7 +55,7 @@ def handle_first_option():
print("Invalid input. Please try again:") print("Invalid input. Please try again:")
handle_first_option() handle_first_option()
# Select time stamps:
def handle_second_option(): def handle_second_option():
limit_results = input("Returning all timestamps. Limit results? y/n \n") limit_results = input("Returning all timestamps. Limit results? y/n \n")
if limit_results == 'n': if limit_results == 'n':
@@ -64,6 +63,17 @@ def handle_second_option():
for row in output: for row in output:
print(row) print(row)
another_selection = input("Make another selection? y/n \n")
if another_selection == 'y':
parse_input()
elif another_selection == 'n':
pass
else:
print("Make another selection:")
parse_input()
elif limit_results == 'y': elif limit_results == 'y':
def find_row_limit(): def find_row_limit():
user_limit = input("How many rows? \n") user_limit = input("How many rows? \n")
@@ -105,11 +115,51 @@ def handle_second_option():
print("Please provide a valid selection.") print("Please provide a valid selection.")
handle_second_option() handle_second_option()
# Find stamp by session id
def handle_third_option(): def handle_third_option():
stamp = datetime.now() user_id = input("Provide your session id: ")
array = test_select_new(stamp, 'mikayla', 'not python') response = get_created_id(user_id)
print(array)
print("Data fetched successfully:")
for data in response:
print(data)
new_selection = input("Make another selection? y/n ")
if new_selection == 'y':
parse_input()
elif new_selection == 'n':
pass
else:
print("Invalid input.")
parse_input()
# Calculate weekly hours
def handle_fourth_option():
print("Find weekly hours.")
# target = input("Enter a target user name: ")
# print(f'Find weekly hours for {target}')
result = get_weekly_hours()
total_hours = []
for data in result:
inner_comparison = []
for each in data:
inner_comparison.append(datetime.strptime(each, "%Y-%m-%d %H:%M:%S.%f"))
total_hours.append(inner_comparison[1] - inner_comparison[0])
print(total_hours)
hours = 0
minutes = 0
total = 0
for item in total_hours:
total += item.seconds + (item.microseconds / 10 ** 6)
hours = total / (60 * 60)
minutes = total / 60
print(f'Weekly hours: {round(hours, 3)}')
print(f'In minutes: {round(minutes, 3)}')
def __admin__(): def __admin__():
print("ADMIN PORTAL") print("ADMIN PORTAL")
@@ -118,6 +168,7 @@ def __admin__():
1) Delete all rows from table (table and schema will persist) 1) Delete all rows from table (table and schema will persist)
2) Drop table (database will reinitialize on next render) 2) Drop table (database will reinitialize on next render)
3) Backup data from SQLite file. 3) Backup data from SQLite file.
4) Populate with hard coded values
Take care, some actions will permanently delete all data.\n Take care, some actions will permanently delete all data.\n
""") """)
@@ -131,6 +182,8 @@ def __admin__():
print("Drop table. Confirm?") print("Drop table. Confirm?")
elif int(admin_prompt) == 3: elif int(admin_prompt) == 3:
print("Back up all SQLite data.") print("Back up all SQLite data.")
elif int(admin_prompt) == 4:
print("Populate hard coded data.")
else: else:
print("Invalid input.") print("Invalid input.")
@@ -142,6 +195,7 @@ def parse_input():
print(user_prompt) print(user_prompt)
response = input("Enter your selection: ") response = input("Enter your selection: ")
# Error handling
try: try:
response = int(response) response = int(response)
except ValueError: except ValueError:
@@ -151,12 +205,10 @@ def parse_input():
print("Please provide a valid input.") print("Please provide a valid input.")
parse_input() parse_input()
if type(response) == int: if type(response) == int:
print(f'You selected {response}. Working...') print(f'You selected {response}. Working...')
# Directing to secondary functions
if response == 1: if response == 1:
handle_first_option() handle_first_option()
elif response == 2: elif response == 2:
@@ -164,7 +216,7 @@ def parse_input():
elif response == 3: elif response == 3:
handle_third_option() handle_third_option()
elif response == 4: elif response == 4:
pass handle_fourth_option()
elif response == 5: elif response == 5:
pass pass
elif response == 90909: elif response == 90909: