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)