Exemplo n.º 1
0
 def post(self):
     ssid = self.request.cookies.get('ssid', '')
     data = decodeData(ssid)
     if not data:
         self.redirect('/login')
         return
     self.response.headers['Set-Cookie'] = str(
         'ssid=%s; expires=Fri, 31-Dec-2008 23:59:59 GMT;' % ssid)
     self.renderToResponse(_('logout.html'), {})
Exemplo n.º 2
0
    def post(self):
        isSessioned = False
        subdomain = None

        if 'ssid' in self.request.cookies:
            data = decodeData(self.request.cookies['ssid'])
            if data:
                isSessioned = True
                login, pwd, subjectId = data[:3]
                if len(data) > 3:
                    subdomain = data[3]

        if not isSessioned:
            self.redirect('/login?%s' % urlencode(self.request.str_params))
            return

        saveuser = not self.request.cookies.get('nosave', False)
        if not saveuser:
            ssid_cookie = 'ssid=%s; expires=Fri, 31-Dec-2008 23:59:59 GMT;' % \
                self.request.cookies.get('ssid')
            nosave_cookie = 'nosave=1; expires=Fri, 31-Dec-2008 23:59:59 GMT;'
            self.response.headers.add_header('Set-Cookie', str(ssid_cookie))
            self.response.headers.add_header('Set-Cookie', str(nosave_cookie))

        self._client.setCredentials(
            login,
            pwd,
        )

        project = self.request.get('pf', 'all')
        dt = datetime.datetime.now()
        year = self.request.get('yf', dt.year)
        month = self.request.get('mf', dt.month)
        try:
            project = int(project)
        except:
            project = 'all'
        try:
            year = int(year)
            if year < 2000 or year > 3000:
                raise Exception()
        except:
            year = dt.year
        try:
            month = int(month)
            if month < 1 or month > 12:
                raise Exception()
        except:
            month = dt.month
        dt = dt.replace(day=1, month=month, year=year)
        report_raw = self.getMonthTimeReport(
            subdomain, dt.year, dt.month, subjectId, project)
        month_info = []
        report = {'entries': []}
        total_hours = 0
        for week_raw in calendar.monthcalendar(dt.year, dt.month):
            week = []
            month_info.append(week)
            for day in week_raw:
                if day in report_raw[0]:
                    day_obj = Day(day, report_raw[0][day])
                    total_hours += day_obj.time
                    report['entries'].append(day_obj)
                else:
                    day_obj = Day(day)
                week.append(day_obj)

        report_raw[1]['all'] = '-- All projects --'
        # sort projects by a name
        sort_cmp = lambda x, y: cmp(x[1], y[1])
        sorted_projects = sorted(report_raw[1].items(), sort_cmp)
        now = datetime.datetime.now()
        report.update({
            'total_hours': total_hours,
            'weeks': month_info,
            'project_filter': project,
            'year_filter': dt.year,
            'month_filter': dt.month,
            'years': [i + 1 for i in range(now.year - 5, now.year)],
            'projects': sorted_projects,
            'username': login,
            'stayloggedin': saveuser,
            'id': subjectId,
            'root': self.absoluteUrl(subdomain),
            'dt': now,
        })

        projects = set(map(lambda x: x.projectref[0], report_raw[2]))
        grouped = [(x, sum([y.hours
                            for y in report_raw[2]
                            if y.projectref[0] == x]
                           )) for x in projects]

        grouped = sorted(grouped)
        tsum = sum(map(lambda x: x[1], grouped))
        ss = 0.0
        sd = []
        tt = []
        dict_project = dict(sorted_projects)
        for i, h in grouped:
            x = h * 12.0 / tsum
            tt.append(sectortext(i, ss, x, h, dict_project[i], 250))
            ss += x
            sd.append(sector(i, ss, 250))
        sd.reverse()
        graph = "background-image: url(\"data:image/svg+xml;utf8," \
            "<svg height='500' width='500' " \
            "xmlns:xlink='http://www.w3.org/1999/xlink' " \
            "xmlns='http://www.w3.org/2000/svg'>" \
            "<g>%s</g><g>%s</g></svg>\");" % ("".join(sd), "".join(tt))

        values = {
            'report': report,
            'graph': graph,
        }
        self.renderToResponse(_('index.html'), values)