def handler(user_id: str) -> Response:
    """ Handler of TEAM_06_STOP_TIME_TRACKING intent,
        TEAM_06_STOP_TIME_TRACKING intent is activated when user says 'zeiterfassung stoppen'
        stops running timer 

    :return:        Response
    """
    clockify_api_key = get_clockify_api_key(user_id)
    clockify = get_clockify(clockify_api_key)
    clockify_id = clockify['user_id']
    workspace_id = clockify['active_workspace_id']
    time_entries = get_time_entries(clockify_api_key, workspace_id,
                                    clockify_id)
    project_ids = get_project_ids(clockify_api_key, workspace_id)

    # Get time tracking status
    running_timer = check_running_timer(time_entries)

    if running_timer:
        # Stop time tracking
        now = datetime.utcnow()
        now_str = now.isoformat()
        now_str = now_str.split('.')[0] + ".000Z"
        time_entrie = stop_time_entrie(clockify_api_key,
                                       workspace_id,
                                       user_id=clockify_id,
                                       end_datetime=now_str)

        project = project_ids[time_entrie['projectId']]
        duration = parse_duration(time_entrie['timeInterval']['duration'])
        task = time_entrie['description']

        set_project(user_id, '')
        set_task(user_id, '')

        msg = _('STOP_COMFIRMATION',
                project=project,
                task=task,
                duration=duration)
    else:
        msg = _('STOP_ERROR')

    response = tell(msg)
    return response
Exemplo n.º 2
0
def test_examples():
    assert parse_duration("1 week 2 days") == datetime.timedelta(days=7 + 2)
    assert parse_duration("1 month 2 weeks") == datetime.timedelta(days=30 +
                                                                   2 * 7)
    assert parse_duration("12 hours") == datetime.timedelta(hours=12)

    assert parse_duration("1 hour 8 days") == datetime.timedelta(hours=1,
                                                                 days=8)
    assert parse_duration("1 hours 8 days") == datetime.timedelta(hours=1,
                                                                  days=8)

    with pytest.raises(ValueError):
        parse_duration("1 hour 2 hour")

    with pytest.raises(ValueError):
        parse_duration("1 invalidunit")

    with pytest.raises(ValueError):
        parse_duration("1 invalidunits")

    with pytest.raises(ValueError):
        parse_duration("hour 2")

    with pytest.raises(ValueError):
        parse_duration("2hours")

    with pytest.raises(ValueError):
        parse_duration("2 hours 3")

    with pytest.raises(ValueError):
        parse_duration("-2 hours")

    assert parse_duration("24 hours") == parse_duration("1 day")
Exemplo n.º 3
0
def test_composite():
    assert parse_duration(
        "27 years 3 month 78 weeks 12 days 314 hours") == datetime.timedelta(
            days=27 * 365 + 3 * 30 + 78 * 7 + 12, hours=314)
Exemplo n.º 4
0
def test_simple_durations():
    assert parse_duration("1 month") == datetime.timedelta(days=30)
    assert parse_duration("2 month") == datetime.timedelta(days=2 * 30)
    assert parse_duration("1 months") == datetime.timedelta(days=30)
    assert parse_duration("2 months") == datetime.timedelta(days=2 * 30)

    assert parse_duration("1 week") == datetime.timedelta(days=7)
    assert parse_duration("2 week") == datetime.timedelta(days=14)
    assert parse_duration("1 weeks") == datetime.timedelta(days=7)
    assert parse_duration("2 weeks") == datetime.timedelta(days=14)

    assert parse_duration("1 hour") == datetime.timedelta(hours=1)
    assert parse_duration("2 hour") == datetime.timedelta(hours=2)
    assert parse_duration("1 hours") == datetime.timedelta(hours=1)
    assert parse_duration("2 hours") == datetime.timedelta(hours=2)

    assert parse_duration("1 day") == datetime.timedelta(days=1)
    assert parse_duration("2 day") == datetime.timedelta(days=2)
    assert parse_duration("1 days") == datetime.timedelta(days=1)
    assert parse_duration("2 days") == datetime.timedelta(days=2)

    assert parse_duration("1 year") == datetime.timedelta(days=1 * 365)
    assert parse_duration("2 year") == datetime.timedelta(days=2 * 365)
    assert parse_duration("1 years") == datetime.timedelta(days=1 * 365)
    assert parse_duration("2 years") == datetime.timedelta(days=2 * 365)
    # project = project_ids[time_entrie['projectId']]

    # duration = time_entrie['timeInterval']['duration']
    # task = time_entrie['description']
    # print(project)
    # print(duration)
    # print(task)
    try:
        clockify_api_key = ""
        clockify = get_clockify(clockify_api_key)
        clockify_id = clockify['user_id']
        workspace_id = clockify['active_workspace_id']
        project_ids = get_project_ids(clockify_api_key, workspace_id)
        time_entries = get_time_entries(clockify_api_key, workspace_id,
                                        clockify_id)

        time_entrie = time_entries[0]
        if time_entrie['timeInterval']['duration'] is None:
            time_entrie = time_entries[1]

        if time_entrie:
            print(time_entrie)
            project = project_ids[time_entrie['projectId']]
            duration = parse_duration(time_entrie['timeInterval']['duration'])
            task = time_entrie['description']
            print(project)
            print(duration)
            print(task)
    except:
        print("error msg")
def handler(user_id: str) -> Response:
    """ Handler of TEAM_06_SHOW_TIME_TRACKING intent,
        TEAM_06_SHOW_TIME_TRACKING intent is activated when user says 'Stunden'
        returns booked working hours

    :return:        Response
    """

    user_info = get_user(user_id)
   
    if user_info:
        update_user(user_info)
    else: 
        create_user(user_id)
    
    clockify_api_key = get_clockify_api_key(user_id) 

    if clockify_api_key is None or clockify_api_key == '':
        user_token = get_user_token(user_id)
        
        if user_token is None or user_token == '':
            user_token = get_random_string(4)
            set_user_token(user_id, user_token)

        msg = _('WELCOME_NEW_USER')

        response = tell(msg)

        response.card = Card(
            type_="GENERIC_DEFAULT",
            title="Time Tracker: Hinterlege deinen Clockify Account",
            text="User Token: {token}".format(token=user_token),
            action=get_auth_url(token=user_token),
            action_text="Klick hier, um einen Account zu hinterlegen."
        )
    else:

        try:
            clockify = get_clockify(clockify_api_key)
            clockify_id = clockify['user_id']
            workspace_id = clockify['active_workspace_id']
            project_ids = get_project_ids(clockify_api_key, workspace_id)
            time_entries = get_time_entries(clockify_api_key, workspace_id, clockify_id)

            time_entrie = time_entries[0]
            if time_entrie['timeInterval']['duration'] is None:
                time_entrie = time_entries[1]

            if time_entrie:
                project = project_ids[time_entrie['projectId']]
                duration = parse_duration(time_entrie['timeInterval']['duration'])
                task = time_entrie['description']
                msg = _("SHOW_TIME", project=project, duration=duration, task=task)
                response = tell(msg)
                response.card = Card(
                    type_="GENERIC_DEFAULT",
                    title="Time Tracker: Clockify Link",
                    text="Hier ist der Link zu deinen gebuchten Stunden:",
                    action=get_clockify_url(),
                    action_text="Öffnen"
                )
            else: 
                msg = _("SHOW_ERROR")
                response = tell(msg)
        except:
            msg = _("SHOW_ERROR")
            response = tell(msg)
    return response