예제 #1
0
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))
예제 #2
0
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))
예제 #3
0
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)
예제 #4
0
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)