def clock_out(db, at=None, verbose=False, timestamp=None, all_out=False): if not timestamp: timestamp = cmdutil.parse_date_time_or_now(at) active = dbutil.get_current_start_time(db) if active is None: raise SystemExit('error: timesheet not active') active_id, start_time = active active_time = timestamp - start_time if verbose: print timedelta(seconds=active_time) if active_time < 0: raise SystemExit("Error: Negative active time") if all_out: db.execute( u''' UPDATE entry SET end_time = ? WHERE end_time is null ''', (timestamp, )) else: db.execute( u''' update entry set end_time = ? where entry.id = ? ''', (timestamp, active_id))
def clock_out(db, at=None, verbose=False, timestamp=None, all_out=False): if not timestamp: timestamp = cmdutil.parse_date_time_or_now(at) active = dbutil.get_current_start_time(db) if active is None: raise SystemExit('error: timesheet not active') active_id, start_time = active active_time = timestamp - start_time if verbose: print timedelta(seconds=active_time) if active_time < 0: raise SystemExit("Error: Negative active time") if all_out: db.execute(u''' UPDATE entry SET end_time = ? WHERE end_time is null ''', (timestamp, )) else: db.execute(u''' update entry set end_time = ? where entry.id = ? ''', (timestamp, active_id))
def backdate(db, args): try: try: now_dt = datetime.now() offset = cmdutil.get_time_offset(args[0]) start = datetime( now_dt.year, now_dt.month, now_dt.day, now_dt.hour, now_dt.minute, now_dt.second ) - offset except ValueError: start = datetime.fromtimestamp(cmdutil.parse_date_time(args[0])) args = args[1:] active = dbutil.get_current_start_time(db) if active: clock_out(db) sql = """ SELECT id FROM entry WHERE sheet = ? AND end_time > ? """ sql_args = ( dbutil.get_current_sheet(db), int(time.mktime(start.timetuple())), ) db.execute(sql, sql_args) rows = db.fetchall() if len(rows) > 1: raise exceptions.CommandError( '%s overlaps %s entries. ' 'Please select a later time to backdate to.' % ( start, len(rows) ) ) sql = """ UPDATE entry SET end_time = ? WHERE sheet = ? AND end_time > ? """ sql_args = ( int(time.mktime(start.timetuple())), dbutil.get_current_sheet(db), int(time.mktime(start.timetuple())), ) db.execute(sql, sql_args) # Clock in args.extend( ['--at', str(start)] ) in_(db, args) except IndexError as e: print ( "Backdate requires at least one argument: START. " "Please use either the format \"YYY-MM-DD HH:MM\" or " "a time offset like '1h 20m'." ) logger.exception(e)
def backdate(db, args): try: try: now_dt = datetime.now() offset = cmdutil.get_time_offset(args[0]) start = datetime(now_dt.year, now_dt.month, now_dt.day, now_dt.hour, now_dt.minute, now_dt.second) - offset except ValueError: start = datetime.fromtimestamp(cmdutil.parse_date_time(args[0])) args = args[1:] active = dbutil.get_current_start_time(db) if active: clock_out(db) sql = """ SELECT id FROM entry WHERE sheet = ? AND end_time > ? """ sql_args = ( dbutil.get_current_sheet(db), int(time.mktime(start.timetuple())), ) db.execute(sql, sql_args) rows = db.fetchall() if len(rows) > 1: raise exceptions.CommandError( '%s overlaps %s entries. ' 'Please select a later time to backdate to.' % (start, len(rows))) sql = """ UPDATE entry SET end_time = ? WHERE sheet = ? AND end_time > ? """ sql_args = ( int(time.mktime(start.timetuple())), dbutil.get_current_sheet(db), int(time.mktime(start.timetuple())), ) db.execute(sql, sql_args) # Clock in args.extend(['--at', str(start)]) in_(db, args) except IndexError as e: print( "Backdate requires at least one argument: START. " "Please use either the format \"YYY-MM-DD HH:MM\" or " "a time offset like '1h 20m'.") logger.exception(e)