import calendar from datetime import datetime from pprint import pprint # import pytz from dmweb.dm import dmbp from flask import Blueprint, render_template from .get_period_times import get_period_totals, timezone class DMHTMLCalendar(calendar.HTMLCalendar): # def formatmonth(self, theyear, themonth, withyear=True): # self.dmmonth = themonth # super().formatmonth(self, theyear, themonth) def setcalmonth(self, month): self.dmmonth = month def setcalyear(self, year): self.dmyear = year def settask(self, task): self.task = task def oneday(self, month, day): current_year = datetime.today().year start = datetime(self.dmyear, month, day).replace( hour=0, minute=0, second=0, tzinfo=timezone ) end = datetime(self.dmyear, month, day).replace( hour=23, minute=59, second=59, tzinfo=timezone ) rows = get_period_totals(start, end, self.task) returnstr = "" for row in rows: returnstr += "".format( row["ws"], row["total"] ) returnstr += "
{}{}
" return returnstr def oneweek(self, month, week): start_day = None end_day = None for d, wd in week: if d == 0: continue else: start_day = d break for d, wd in reversed(week): if d == 0: continue else: end_day = d break start = datetime(self.dmyear, month, start_day).replace( hour=0, minute=0, second=0, tzinfo=timezone ) end = datetime(self.dmyear, month, end_day).replace( hour=23, minute=59, second=59, tzinfo=timezone ) rows = get_period_totals(start, end) returnstr = "" for row in rows: returnstr += "".format( row["ws"], row["total"] ) returnstr += "
{}{}
" return returnstr def formatweekheader(self): """ Return a header for a week as a table row. """ s = "".join(self.formatweekday(i) for i in self.iterweekdays()) s += "Week Totals" return "%s" % s def formatweek(self, theweek): """ Return a complete week as a table row. """ s = "".join(self.formatday(d, wd) for (d, wd) in theweek) s += "{}".format(self.oneweek(self.dmmonth, theweek)) return "%s" % s def formatday(self, day, weekday): """ Return a day as a table cell. """ if day == 0: return ' ' # day outside month else: return '%s' % ( self.cssclasses[weekday], self.oneday(self.dmmonth, day), ) @dmbp.route("/month") @dmbp.route("/month/") @dmbp.route("/month//") @dmbp.route("/month/task/") @dmbp.route("/month//task/") @dmbp.route("/month///task/") def month(month=None, year=None, task=None): usemonth = datetime.today().month useyear = datetime.today().year if month: usemonth = month if year: useyear = year cal = DMHTMLCalendar(calendar.SATURDAY) cal.settask(None) if task: cal.settask(task) cal.setcalmonth(usemonth) cal.setcalyear(useyear) return render_template("calendar.html", content=cal.formatmonth(useyear, usemonth))