コード例 #1
0
ファイル: reports.py プロジェクト: lowinger42/ergotime
def reports_monthly():
    errors.clear()
    p = AttrDict()
    activities = Activities()
        
    # parameters, in url
    p.userid = request.args.get("userid", 1, type=int)
    p.activityid = request.args.get("activityid", -1, type=int)
    p.start = request.args.get("start", None)
    p.debug =  request.args.get("debug", None)
    p.action = request.args.get("action", "-noaction-")

    p.dstart = MyDateTime()
    try:
        if p.start is not None:
            p.dstart.setFromStr(p.start + "-01 00:00:00")
    except ValueError as e:
        print(e)
        errors.append("Incorrect start date, using todays date")

    p.dstart.day = 1
    
    p.prevstart = p.dstart.copy()
    p.prevstart.setFirstDayInMonth(-1)
    
    p.nowstart = MyDateTime()
    p.prevstart.setFirstDayInMonth(0)
    
    p.nextstart = p.dstart.copy()
    p.nextstart.setFirstDayInMonth(1)
    
    # Show filters, at top of screen
    p.param = "&userid=%s&activityid=%s" % (p.userid, p.activityid)
    
    if p.action == "+A" or p.action == "-A":
        if p.activityid < 0:
            if p.action == "+A":
                # get first activity
                sql = "SELECT * FROM activity ORDER BY name LIMIT 1"
            else:
                # get last activity
                sql = "SELECT * FROM activity ORDER BY name DESC LIMIT 1"
            data = db2.conn.select_one(sql, (p.activityid,))
            if data:
                p.activityid = data._id
        else:
            direction = ">"
            desc = ""
            if p.action == "-A":
                direction = "<"
                desc = "DESC"
                
            try:
                # get current activity name from id
                sql = "SELECT * FROM activity WHERE _id=%s"
                data = db2.conn.select_one(sql, (p.activityid,))
                if data:
                    # get next/prev activity
                    sql = "SELECT * FROM activity WHERE name %s %%s ORDER BY name %s LIMIT 1" % (direction, desc)
                    try:
                        data2 = db2.conn.select_one(sql, (data.name, ))
                        if data2:
                            print("data2", data2)
                            p.activityid = data2._id
                        else:
                            p.activityid = -1
                    except db2.conn.exception as err:
                        errors.append("db.Error %s"  % err)
                else:
                    errors.append("Can't get current activity from activityid %s" % p.activityid)
            except db2.conn.exception as err:
                errors.append("db.Error: %s" % err)
    
    if p.userid == None:
        errors.append("Please specify user")
    elif p.activityid is None:
        errors.append("Please specifiy activity")
    else:
        sql = "SELECT * FROM activity"
        values = []

        if p.activityid > 0:
            sql += " WHERE _id=%s"
            values.append(p.activityid)
        
        sql += " ORDER BY name"
        try:
            activitylist = db2.conn.select_all(sql, values)
            for activity in activitylist:
                activityMonth = addActivity( activity=activity,
                            userid=p.userid, 
                            start=p.dstart, 
                            debug=p.debug)
                if len(activityMonth.days) > 0:
                    activities.addActivity(activityMonth)

        except db2.DbException as err:
            errors.append("Can't load list of activities %s", err)
        
    log.debug("p.dstart 2  %s" % p.dstart)
    log.debug("p.prevstart %s" % p.prevstart)
    log.debug("p.nowstart  %s" % p.nowstart)
    log.debug("p.nextstart %s" % p.nextstart)

    args = {
        'errors': errors,
        'activities': activities,
        'p': p,
        'htmllib': htmllib,
    }
    return render_template('reports.html', **args)