def home():
    session_data = Session()
    db_query = Queries(credit=True)
    add_activity_form = AddActivityForm()
    if add_activity_form.validate_on_submit():
        filename = secure_filename(add_activity_form.file.data.filename)
        path = os.path.join(__file__, os.pardir)
        add_activity_form.file.data.save(os.path.join(
            os.path.abspath(path), current_app.config['UPLOAD_FILE_DIR'], filename))

        if add_activity_form.activity.data == ActivityType.Ride.name:
            a_type = ActivityType.Ride
        elif add_activity_form.activity.data == ActivityType.Run.name:
            a_type = ActivityType.Run
        else:
            a_type = ActivityType.Walk

        activity = current_app.config['PROCESSOR'].process_input_data(filename)
        current_app.config['PROCESSOR'].landing_cleanup(filename)
        distance = activity[0]
        seconds = activity[1].total_seconds()
        start_time = activity[2]

        if distance == 0:
            session_data.warning('Activity of zero distance ignored.')
        elif start_time is None:
            if a_type == ActivityType.Run:
                a_type = ActivityType.Walk
            start_time = datetime.datetime.now().replace(microsecond=0)
            full_time = datetime.time()
            avg_time = datetime.time()
            new_activity = Activity(datetime=start_time, distance=distance, duration=full_time,
                                    average_duration_per_km=avg_time, type=a_type)
            db_query.save_new_user_activities(current_user.id, new_activity)
            session_data.info(str(a_type) + ' activity of ' + str(distance) + ' km added.')
        else:
            avg_seconds = round(seconds / distance)
            full_time = (datetime.datetime(2000, 1, 1, 0) + datetime.timedelta(seconds=seconds)).time()
            avg_time = (datetime.datetime(2000, 1, 1, 0) + datetime.timedelta(seconds=avg_seconds)).time()
            new_activity = Activity(datetime=start_time, distance=distance, duration=full_time,
                                    average_duration_per_km=avg_time, type=a_type)
            db_query.save_new_user_activities(current_user.id, new_activity)
            session_data.info(str(a_type) + ' activity of ' + str(distance) + ' km added.')

        return redirect(url_for('main.home'))

    check_profile_verified(session_data)
    total_foot = db_query.get_total_distance_by_user_on_foot(current_user.id) or 0
    total_bike = db_query.get_total_distance_by_user_on_bike(current_user.id) or 0
    total_credit = None
    if current_user.type == UserType.Student:
        total_credit = round(total_foot + total_bike / 2, 2)

    return render_template("personal_dashboard.html", title='Home', form=add_activity_form,
                           total_foot=total_foot, total_bike=total_bike, total_credit=total_credit,
                           season=db_query.SEASON_COMPETITION, season_credit=db_query.SEASON_CREDIT,
                           session_data=session_data)
def check_profile_verified(session_data: session.Session):
    if not current_user.is_completed():
        session_data.error(
            'Your profile is not completed! Please, go to Settings and fill in your data.<br />'
            +
            'Your activities will be considered only after your profile is verified.'
        )
    elif not current_user.verified:
        session_data.warning(
            'Your profile is not yet verified. ' +
            'Let us know if you are sure you filled in correct data and it takes too long.<br />'
            +
            'Your activities will be considered only after your profile is verified.'
        )