コード例 #1
0
    def _remind_missing_hours(self, email, name, hours, date):
        """ remind (via email) everyone about their missing hours """
        LOG(u"Starting email reminder for user %s" % (email, ))
        time_list_url = self.request.url_for('/times/list',
                                             date=date.strftime('%d.%m.%Y'))
        hours_url = self.settings['FRONTEND_PREFIX'] + time_list_url
        message = self.HOURS_EMAIL_TEMPLATE(
            name=name,
            min_hours=MIN_HOURS,
            actual='%.2f' % hours,
            url=hours_url,
            date=date.strftime('%d.%m.%Y'),
        )

        def on_success(result):
            LOG(u'Email reminder about missing hours sent to user %s' %
                (email, ))

        def on_error(err):
            EXCEPTION(u'Failed to remind user %s about missing hours' %
                      (email, ))

        topic = self._(u"[intranet] brakujące godziny z dnia ${date}",
                       date=date.strftime('%d.%m.%Y'))
        deferred = EmailSender.send(email, topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Email reminder for user %s started" % (email, ))
        return message
コード例 #2
0
ファイル: absence.py プロジェクト: avalanchy/intranet
    def _send_email(self, type, date_start, date_end, days, remarks):
        name = self.request.user.name
        email = self.request.user.email
        today = datetime.date.today()
        topic, body = self.TYPES[type]

        body = self._(
            body,
            today=today.strftime('%Y-%m-%d'),
            date_start=date_start,
            date_end=date_end,
            year=today.year,
            days=days,
            remarks=remarks,
            name=name,
        )

        return EmailSender.send(
            config['ACCOUNTANT_EMAIL'],
            self._(topic),
            body,
            cc=email,
            sender_name=name,
            replay_to=','.join([email])
        )
コード例 #3
0
ファイル: remind.py プロジェクト: KenjiTakahashi/intranet
    def _remind_resolved_bugs_user(self, user):
        """ remind (via email) user to close his resolved bugs """
        LOG(u"Starting email reminder for user %s" % (user.email, ))
        my_bugs_url = self.request.url_for('/bugs/my', resolved=1)
        list_url = self.settings['FRONTEND_PREFIX'] + my_bugs_url

        bugs = Bugs(self.request, user).get_user(resolved=True)
        if not bugs:
            LOG(u"No bugs to remind user %s of" % (user.email, ))
            return self._(u'No bugs for user ${user}', user=user.email)
        output = []
        output.append(self._(u'Hej ${user}! Masz rozwiązane niezamknięte bugi, weź je ogarnij:', user=user.name))
        output.append(u'')
        for i, bug in enumerate(bugs, 1):
            id = bug.id
            desc = bug.desc
            url = bug.get_url()
            output.append(u"%(i)s. #%(id)s %(desc)s %(url)s" % locals())
        output.append(u'')
        output.append(self._(u'Te bugi możesz również zobaczyć pod adresem ${list_url}', list_url=list_url))
        output.append(u'')
        output.append(self._(u'Pozdrawiam,\nTwój intranet'))
        message = u'\n'.join(output)

        def on_success(result):
            LOG(u'Email reminder about resolved bugs sent to user %s' % (user.email, ))
        def on_error(err):
            EXCEPTION(u'Failed to remind user %s about resolved bugs' % (user.email, ))
        topic = self._(u"[intranet] ${num} zgłoszeń do zamknięcia", num=len(bugs))
        deferred = EmailSender.send(user.email, topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Email reminder for user %s started" % (user.email, ))
        return message
コード例 #4
0
ファイル: times.py プロジェクト: adamgr/intranet
    def _today_hours_without_ticket(self, date, projects, omit_users):
        if not omit_users:
            # because u.id NOT IN (,) returns error
            omit_users = (987654321,)
        time_entries = self.session.query('user', 'description', 'time', 'project', 'client').from_statement("""
        SELECT
            u.name as "user", t.description as "description",
            t.time as "time", p.name as "project", c.name as "client"
        FROM
            time_entry as t, project as p, client as c, "user" as u
        WHERE
            t.deleted = False AND
            t.date = :date AND
            t.ticket_id IS NULL AND
            u.id = t.user_id AND
            p.id = t.project_id AND
            c.id = p.client_id AND
            p.id IN :projects AND
            u.id NOT IN :users
        ORDER BY u.name, c.name, p.name
        """).params(date=date, projects=tuple(projects), users=tuple(omit_users)).all()


        if not time_entries:
            LOG(u"No time entries for report with hours without ticket added on %s" % (date,))
            return u"No time entries for report with hours without ticket added on %s" % (date,)

        output = []
        total_sum = 0
        user_sum = defaultdict(lambda: 0.0)
        user_entries = defaultdict(lambda: [])

        for user, description, time, project, client in time_entries:
            total_sum += time
            user_sum[user] += time
            user_entries[user].append((description, time, project, client))

        output.append(self._(u"Daily hours report without bugs (${total_sum} h)", total_sum=u'%.2f' % total_sum))

        for user, entries in user_entries.iteritems():
            output.append(u"")
            output.append(u"\t%s (%.2f h):" % (user, user_sum[user]))

            for description, time, project, client in entries:
                output.append(u"\t\t- %s / %s / %s %.2f h" % (client, project, description, time))

        message = u'\n'.join(output)

        def on_success(result):
            LOG(u'Report with hours without ticket added on %s - sent' % (date,))
        def on_error(err):
            EXCEPTION(u'Failed to sent Report with hours without ticketadded on %s' % (date,))
        topic = self._(u"[intranet] Daily hours report without bugs")
        deferred = EmailSender.send(config['MANAGER_EMAIL'], topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Report with hours without ticket on %s - started" % (date,))
        return message
コード例 #5
0
ファイル: times.py プロジェクト: pytlakp/intranet-1
    def _today_hours_without_ticket(self, date, projects, omit_users):
        if not omit_users:
            # because u.id NOT IN (,) returns error
            omit_users = (987654321,)
        time_entries = self.session.query('user', 'description', 'time', 'project', 'client').from_statement("""
        SELECT
            u.name as "user", t.description as "description",
            t.time as "time", p.name as "project", c.name as "client"
        FROM
            time_entry as t, project as p, client as c, "user" as u
        WHERE
            t.deleted = False AND
            t.date = :date AND
            t.ticket_id IS NULL AND
            u.id = t.user_id AND
            p.id = t.project_id AND
            c.id = p.client_id AND
            p.id IN :projects AND
            u.id NOT IN :users
        ORDER BY u.name, c.name, p.name
        """).params(date=date, projects=tuple(projects), users=tuple(omit_users)).all()


        if not time_entries:
            LOG(u"No time entries for report with hours without ticket added on %s" % (date,))
            return u"No time entries for report with hours without ticket added on %s" % (date,)

        output = []
        total_sum = 0
        user_sum = defaultdict(lambda: 0.0)
        user_entries = defaultdict(lambda: [])

        for user, description, time, project, client in time_entries:
            total_sum += time
            user_sum[user] += time
            user_entries[user].append((description, time, project, client))

        output.append(self._(u"Daily hours report without bugs (${total_sum} h)", total_sum=u'%.2f' % total_sum))

        for user, entries in user_entries.iteritems():
            output.append(u"")
            output.append(u"\t%s (%.2f h):" % (user, user_sum[user]))

            for description, time, project, client in entries:
                output.append(u"\t\t- %s / %s / %s %.2f h" % (client, project, description, time))

        message = u'\n'.join(output)

        def on_success(result):
            LOG(u'Report with hours without ticket added on %s - sent' % (date,))
        def on_error(err):
            EXCEPTION(u'Failed to sent Report with hours without ticketadded on %s' % (date,))
        topic = self._(u"[intranet] Daily hours report without bugs")
        deferred = EmailSender.send(config['MANAGER_EMAIL'], topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Report with hours without ticket on %s - started" % (date,))
        return message
コード例 #6
0
ファイル: times.py プロジェクト: pytlakp/intranet-1
    def action(self):
        today = datetime.date.today()
        query = self.session.query
        uber_query = query(
            Client.name, Project.name, TimeEntry.ticket_id,
            User.email, TimeEntry.description, TimeEntry.date, TimeEntry.time
        )
        uber_query = uber_query.filter(TimeEntry.user_id==User.id)\
                               .filter(TimeEntry.project_id==Project.id)\
                               .filter(Project.tracker_id==Tracker.id)\
                               .filter(Project.client_id==Client.id)
        start, end = self._previous_month()
        uber_query = uber_query.filter(TimeEntry.date>=start)\
                               .filter(TimeEntry.date<=end)\
                               .filter(TimeEntry.deleted==False)
        uber_query = uber_query.order_by(Client.name, Project.name, TimeEntry.ticket_id, User.name)
        data = uber_query.all()

        wbk = xlwt.Workbook()
        sheet = wbk.add_sheet('%s.xls' % start.strftime('%m-%Y'))

        heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
        headings = ('Klient','Projekt', 'Ticket id', 'Pracownik', 'Opis', 'Data', 'Czas')
        headings_width = (x*256 for x in (20, 30, 10, 40, 100, 12, 10))
        for colx, value in enumerate(headings):
            sheet.write(0, colx, value, heading_xf)
        for i, width in enumerate(headings_width):
            sheet.col(i).width = width

        sheet.set_panes_frozen(True)
        sheet.set_horz_split_pos(1)
        sheet.set_remove_splits(True)

        for j, row in enumerate(data):
            row = self._format_row(row)
            for i, cell in enumerate(row):
                sheet.write(j+1,i,*cell)

        file_path = '/tmp/%s.xls' % start.strftime('%m-%Y')
        wbk.save(file_path)
        topic = '[intranet] Excel with projects hours'
        message = 'Excel with projects hours'
        deferred = EmailSender.send_with_file(
            config['MANAGER_EMAIL'],
            topic,
            message,
            file_path
        )
        def on_success(result):
            os.remove(file_path)
            LOG(u'Report with client hours excel %s - sent' % (today,))
        def on_error(err):
            os.remove(file_path)
            EXCEPTION(u'Failed to sent Report with client hours excel on %s' % (today,))
        deferred.addCallbacks(on_success, on_error)
        return Response('ok')
コード例 #7
0
ファイル: times.py プロジェクト: adamgr/intranet
    def action(self):
        today = datetime.date.today()
        query = self.session.query
        uber_query = query(
            Client.name, Project.name, TimeEntry.ticket_id,
            User.email, TimeEntry.description, TimeEntry.date, TimeEntry.time
        )
        uber_query = uber_query.filter(TimeEntry.user_id==User.id)\
                               .filter(TimeEntry.project_id==Project.id)\
                               .filter(Project.tracker_id==Tracker.id)\
                               .filter(Project.client_id==Client.id)
        start, end = self._previous_month()
        uber_query = uber_query.filter(TimeEntry.date>=start)\
                               .filter(TimeEntry.date<=end)\
                               .filter(TimeEntry.deleted==False)
        uber_query = uber_query.order_by(Client.name, Project.name, TimeEntry.ticket_id, User.name)
        data = uber_query.all()

        wbk = xlwt.Workbook()
        sheet = wbk.add_sheet('%s.xls' % start.strftime('%m-%Y'))

        heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
        headings = ('Klient','Projekt', 'Ticket id', 'Pracownik', 'Opis', 'Data', 'Czas')
        headings_width = (x*256 for x in (20, 30, 10, 40, 100, 12, 10))
        for colx, value in enumerate(headings):
            sheet.write(0, colx, value, heading_xf)
        for i, width in enumerate(headings_width):
            sheet.col(i).width = width

        sheet.set_panes_frozen(True)
        sheet.set_horz_split_pos(1)
        sheet.set_remove_splits(True)

        for j, row in enumerate(data):
            row = self._format_row(row)
            for i, cell in enumerate(row):
                sheet.write(j+1,i,*cell)

        file_path = '/tmp/%s.xls' % start.strftime('%m-%Y')
        wbk.save(file_path)
        topic = '[intranet] Excel with projects hours'
        message = 'Excel with projects hours'
        deferred = EmailSender.send_with_file(
            config['MANAGER_EMAIL'],
            topic,
            message,
            file_path
        )
        def on_success(result):
            os.remove(file_path)
            LOG(u'Report with client hours excel %s - sent' % (today,))
        def on_error(err):
            os.remove(file_path)
            EXCEPTION(u'Failed to sent Report with client hours excel on %s' % (today,))
        deferred.addCallbacks(on_success, on_error)
        return Response('ok')
コード例 #8
0
ファイル: times.py プロジェクト: pytlakp/intranet-1
    def _hours_for_previous_months(self, date):
        current_month_start = datetime.date(date.year, date.month, 1)
        time_entries = self.session.query(
            'user', 'client', 'project', 'time',
            'description', 'ticket_id', 'entry_date', 'entry_status').from_statement("""
        SELECT
            u.name as "user", c.name as "client", p.name as "project",
            t.time as "time", t.description as "description",
            t.ticket_id as "ticket_id", t.date as "entry_date",
            t.deleted as "entry_status"
        FROM
            time_entry as t,
            "user" as u,
            client as c,
            project as p
        WHERE
            t.user_id = u.id AND
            t.project_id = p.id AND
            p.client_id = c.id AND
            DATE(t.modified_ts) = :date AND
            t.date < :current_month_start
        ORDER BY
            u.name, c.name, p.name
        """).params(current_month_start=current_month_start, date=date).all()

        if not time_entries:
            LOG(u"No time entries for previous months %s" % (date,))
            return u"No time entries for previous months %s" % (date,)

        output = []
        tmp_user = ''
        for user, client, project, time, description, ticket_id, entry_date, entry_status in time_entries:
            if tmp_user != user:
                tmp_user = user
                output.append(u"")
                output.append(u"%s:" % (user,))

            ticket_id = ticket_id and u"[%s] " % ticket_id or u""
            status = entry_status and self._(u"[Deleted]") or u""
            output.append(u"\t- [%s]%s %s / %s / %s%s %.2f h" % (entry_date, status, client, project, ticket_id, description, time))

        message = u'\n'.join(output)

        def on_success(result):
            LOG(u'Report with hours added for the previous months - sent')
        def on_error(err):
            EXCEPTION(u'Failed to sent report with hours added for the previous months')
        topic = self._(u"[intranet] Report with hours added for the previous months")
        deferred = EmailSender.send(config['MANAGER_EMAIL'], topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Report with hours added for previous months - started")
        return message
コード例 #9
0
ファイル: times.py プロジェクト: adamgr/intranet
    def _hours_for_previous_months(self, date):
        current_month_start = datetime.date(date.year, date.month, 1)
        time_entries = self.session.query(
            'user', 'client', 'project', 'time',
            'description', 'ticket_id', 'entry_date', 'entry_status').from_statement("""
        SELECT
            u.name as "user", c.name as "client", p.name as "project",
            t.time as "time", t.description as "description",
            t.ticket_id as "ticket_id", t.date as "entry_date",
            t.deleted as "entry_status"
        FROM
            time_entry as t,
            "user" as u,
            client as c,
            project as p
        WHERE
            t.user_id = u.id AND
            t.project_id = p.id AND
            p.client_id = c.id AND
            DATE(t.modified_ts) = :date AND
            t.date < :current_month_start
        ORDER BY
            u.name, c.name, p.name
        """).params(current_month_start=current_month_start, date=date).all()

        if not time_entries:
            LOG(u"No time entries for previous months %s" % (date,))
            return u"No time entries for previous months %s" % (date,)

        output = []
        tmp_user = ''
        for user, client, project, time, description, ticket_id, entry_date, entry_status in time_entries:
            if tmp_user != user:
                tmp_user = user
                output.append(u"")
                output.append(u"%s:" % (user,))

            ticket_id = ticket_id and u"[%s] " % ticket_id or u""
            status = entry_status and self._(u"[Deleted]") or u""
            output.append(u"\t- [%s]%s %s / %s / %s%s %.2f h" % (entry_date, status, client, project, ticket_id, description, time))

        message = u'\n'.join(output)

        def on_success(result):
            LOG(u'Report with hours added for the previous months - sent')
        def on_error(err):
            EXCEPTION(u'Failed to sent report with hours added for the previous months')
        topic = self._(u"[intranet] Report with hours added for the previous months")
        deferred = EmailSender.send(config['MANAGER_EMAIL'], topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Report with hours added for previous months - started")
        return message
コード例 #10
0
ファイル: form.py プロジェクト: KenjiTakahashi/intranet
 def _send_email(self, date, explanation):
     topic = self._(u'${email} - Late ${date}',
                    email=self.request.user.email,
                    date=date.strftime('%d.%m.%Y')
     )
     deferred = EmailSender.send(
         config['COMPANY_MAILING_LIST'],
         topic,
         explanation,
         sender_name=self.request.user.name,
         replay_to=self.request.user.email,
     )
     return deferred
コード例 #11
0
ファイル: form.py プロジェクト: pytlakp/intranet-1
    def post(self):
        form = LateApplicationForm(self.request.POST, user=self.request.user)
        if form.validate():
            date = form.popup_date.data
            explanation = form.popup_explanation.data
            late = Late(
                user_id=self.request.user.id,
                date=date,
                explanation=explanation,
                justified=True,
            )
            self.session.add(late)
            topic = self._(u'${email} - Late ${date}',
                           email=self.request.user.email,
                           date=date.strftime('%d.%m.%Y'))
            deferred = EmailSender.send(
                config['COMPANY_MAILING_LIST'],
                topic,
                form.popup_explanation.data,
                sender_name=self.request.user.name,
                replay_to=self.request.user.email,
            )
            datehour9 = datetime.datetime.combine(date, hour9)

            calendar = cal.Calendar(self.request.user)
            event = cal.Event(
                datehour9,
                datehour9 + cal.onehour,
                self._(u'Late'),
                explanation,
            )
            event_id = calendar.addEvent(event)

            if deferred:
                LOG(u"Late added")
                if event_id:
                    return Response(
                        self._(u'Request added. Calendar entry added'))
                else:
                    return Response(
                        self.
                        _(u'Request added. Calendar entry has <b class="red">NOT</b> beed added'
                          ))

            else:
                return Response(
                    self.
                    _(u'There was problem with sending email - request has not been added, please conntact administrator'
                      ))

        return dict(form=form)
コード例 #12
0
ファイル: form.py プロジェクト: KenjiTakahashi/intranet
 def _send_mail(self, type, date_start, date_end, days, remarks):
     today = datetime.date.today().strftime('%Y-%m-%d')
     year = datetime.date.today().year
     name = self.request.user.name
     topic, body = self._resolve_type(type)
     kwargs = locals()
     kwargs.pop('self')
     body = body(**kwargs)
     return EmailSender.send(
         config['ACCOUNTANT_EMAIL'],
         topic,
         body,
         cc=self.request.user.email,
         sender_name=self.request.user.name,
         replay_to=','.join([self.request.user.email]),
     )
コード例 #13
0
ファイル: times.py プロジェクト: KenjiTakahashi/intranet
    def _send_email(self):
        data = self._get_data()
        data["not_full_time_users"] = self._get_not_full_time_employees()
        data["quarters"] = "Q%s" % idate.quarter_number(self.start), "Q%s" % idate.quarter_number(self.end)
        data["months"] = self.months
        response = render("intranet3:templates/_email_reports/missed_hours.html", data, request=self.request)
        response = response.replace("\n", "").replace("\t", "")
        deferred = EmailSender.send_html(config["MANAGER_EMAIL"], self._(u"[Intranet2] Missed hours"), response)

        def on_success(result):
            LOG(u"Report with missed hours - sent")

        def on_error(err):
            EXCEPTION(u"Failed to sent report with missed hours")

        deferred.addCallbacks(on_success, on_error)
        return data
コード例 #14
0
ファイル: form.py プロジェクト: adamgr/intranet
    def post(self):
        form = LateApplicationForm(self.request.POST, user=self.request.user)
        if form.validate():
            date = form.popup_date.data
            explanation = form.popup_explanation.data
            late = Late(
                user_id=self.request.user.id,
                date=date,
                explanation=explanation,
                justified=True,
            )
            self.session.add(late)
            topic = self._(u'${email} - Late ${date}',
                email=self.request.user.email,
                date=date.strftime('%d.%m.%Y')
            )
            deferred = EmailSender.send(
                config['COMPANY_MAILING_LIST'],
                topic,
                form.popup_explanation.data,
                sender_name=self.request.user.name,
                replay_to=self.request.user.email,
            )
            datehour9 = datetime.datetime.combine(date, hour9)

            calendar = cal.Calendar(self.request.user)
            event = cal.Event(
                datehour9,
                datehour9+cal.onehour,
                self._(u'Late'),
                explanation,
            )
            event_id = calendar.addEvent(event)

            if deferred:
                LOG(u"Late added")
                if event_id:
                    return Response(self._(u'Request added. Calendar entry added'))
                else:
                    return Response(self._(u'Request added. Calendar entry has <b class="red">NOT</b> beed added'))

            else:
                return Response(self._(u'There was problem with sending email - request has not been added, please conntact administrator'))

        return dict(form=form)
コード例 #15
0
ファイル: times.py プロジェクト: KenjiTakahashi/intranet
    def action(self):
        today = datetime.date.today()
        data = self._annually_report(today.year)

        def on_success(result):
            LOG(u"Report with incorrect time records - sent")

        def on_error(err):
            EXCEPTION(u"Failed to sent report with incorrect time records")

        data["config"] = self.settings
        response = render("intranet3:templates/_email_reports/time_annually_report.html", data, request=self.request)
        response = response.replace("\n", "").replace("\t", "")
        deferred = EmailSender.send_html(
            config["MANAGER_EMAIL"], self._(u"[Intranet2] Wrong time record report"), response
        )
        deferred.addCallbacks(on_success, on_error)
        return Response("ok")
コード例 #16
0
ファイル: times.py プロジェクト: adamgr/intranet
    def action(self):
        today = datetime.date.today()
        data = self._annually_report(today.year)

        def on_success(result):
            LOG(u'Report with incorrect time records - sent')
        def on_error(err):
            EXCEPTION(u'Failed to sent report with incorrect time records')
        data['config'] = self.settings
        response = render('intranet3:templates/_email_reports/time_annually_report.html', data, request=self.request)
        response = response.replace('\n', '').replace('\t', '')
        deferred = EmailSender.send_html(
            config['MANAGER_EMAIL'],
            self._(u'[Intranet2] Wrong time record report'),
            response
        )
        deferred.addCallbacks(on_success, on_error)
        return Response('ok')
コード例 #17
0
ファイル: times.py プロジェクト: pytlakp/intranet-1
    def action(self):
        today = datetime.date.today()
        data = self._annually_report(today.year)

        def on_success(result):
            LOG(u'Report with incorrect time records - sent')
        def on_error(err):
            EXCEPTION(u'Failed to sent report with incorrect time records')
        data['config'] = self.settings
        response = render('intranet3:templates/_email_reports/time_annually_report.html', data, request=self.request)
        response = response.replace('\n', '').replace('\t', '')
        deferred = EmailSender.send_html(
            config['MANAGER_EMAIL'],
            self._(u'[Intranet2] Wrong time record report'),
            response
        )
        deferred.addCallbacks(on_success, on_error)
        return Response('ok')
コード例 #18
0
    def _remind_resolved_bugs_user(self, user):
        """ remind (via email) user to close his resolved bugs """
        LOG(u"Starting email reminder for user %s" % (user.email, ))
        my_bugs_url = self.request.url_for('/bugs/my', resolved=True)
        list_url = self.settings['FRONTEND_PREFIX'] + my_bugs_url

        bugs = Bugs(self.request, user).get_user(resolved=True)
        if not bugs:
            LOG(u"No bugs to remind user %s of" % (user.email, ))
            return self._(u'No bugs for user ${user}', user=user.email)
        output = []
        output.append(
            self.
            _(u'Hej ${user}! Masz rozwiązane niezamknięte bugi, weź je ogarnij:',
              user=user.name))
        output.append(u'')
        for i, bug in enumerate(bugs, 1):
            id = bug.id
            desc = bug.desc
            url = bug.get_url()
            output.append(u"%(i)s. #%(id)s %(desc)s %(url)s" % locals())
        output.append(u'')
        output.append(
            self._(u'Te bugi możesz również zobaczyć pod adresem ${list_url}',
                   list_url=list_url))
        output.append(u'')
        output.append(self._(u'Pozdrawiam,\nTwój intranet'))
        message = u'\n'.join(output)

        def on_success(result):
            LOG(u'Email reminder about resolved bugs sent to user %s' %
                (user.email, ))

        def on_error(err):
            EXCEPTION(u'Failed to remind user %s about resolved bugs' %
                      (user.email, ))

        topic = self._(u"[intranet] ${num} zgłoszeń do zamknięcia",
                       num=len(bugs))
        deferred = EmailSender.send(user.email, topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Email reminder for user %s started" % (user.email, ))
        return message
コード例 #19
0
ファイル: bugs.py プロジェクト: pytlakp/intranet-1
    def _send_report(self, coordinator, email, bugs):
        def on_success(result):
            LOG(u'Monthly report with old bugs - sent')
        def on_error(err):
            EXCEPTION(u'Failed to sent Monthly report with old bugs')

        if coordinator in bugs:
            data = {'bugs': bugs[coordinator][1][:20],
                    'title': self._(u'Lista najstarszych niezamkniętych bugów\nw projektach w których jesteś koordynatorem')}

            response = render(
                'intranet3:templates/_email_reports/old_bugs_report.html',
                data,
                request=self.request
            )
            deferred = EmailSender.send_html(
                email,
                self._(u'[Intranet2] Old bugs report'),
                response
            )
            deferred.addCallbacks(on_success, on_error)
コード例 #20
0
ファイル: remind.py プロジェクト: KenjiTakahashi/intranet
    def _remind_missing_hours(self, email, name, hours, date):
        """ remind (via email) everyone about their missing hours """
        LOG(u"Starting email reminder for user %s" % (email, ))
        time_list_url = self.request.url_for('/times/list', date=date.strftime('%d.%m.%Y'))
        hours_url = self.settings['FRONTEND_PREFIX'] + time_list_url
        message = self.HOURS_EMAIL_TEMPLATE(
            name=name,
            min_hours=MIN_HOURS,
            actual='%.2f' % hours,
            url=hours_url,
            date=date.strftime('%d.%m.%Y'),
        )

        def on_success(result):
            LOG(u'Email reminder about missing hours sent to user %s' % (email, ))
        def on_error(err):
            EXCEPTION(u'Failed to remind user %s about missing hours' % (email, ))
        topic = self._(u"[intranet] brakujące godziny z dnia ${date}", date=date.strftime('%d.%m.%Y'))
        deferred = EmailSender.send(email, topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Email reminder for user %s started" % (email, ))
        return message
コード例 #21
0
ファイル: times.py プロジェクト: adamgr/intranet
 def _send_email(self):
     data = self._get_data()
     data['not_full_time_users'] = self._get_not_full_time_employees()
     data['quarters'] = 'Q%s' % idate.quarter_number(self.start), 'Q%s' % idate.quarter_number(self.end)
     data['months'] = self.months
     response = render(
         'intranet3:templates/_email_reports/missed_hours.html',
         data,
         request=self.request
     )
     response = response.replace('\n', '').replace('\t', '')
     deferred = EmailSender.send_html(
         config['MANAGER_EMAIL'],
         self._(u'[Intranet2] Missed hours'),
         response
     )
     def on_success(result):
         LOG(u'Report with missed hours - sent')
     def on_error(err):
         EXCEPTION(u'Failed to sent report with missed hours')
     deferred.addCallbacks(on_success, on_error)
     return data
コード例 #22
0
ファイル: times.py プロジェクト: pytlakp/intranet-1
 def _send_email(self):
     data = self._get_data()
     data['not_full_time_users'] = self._get_not_full_time_employees()
     data['quarters'] = 'Q%s' % idate.quarter_number(self.start), 'Q%s' % idate.quarter_number(self.end)
     data['months'] = self.months
     response = render(
         'intranet3:templates/_email_reports/missed_hours.html',
         data,
         request=self.request
     )
     response = response.replace('\n', '').replace('\t', '')
     deferred = EmailSender.send_html(
         config['MANAGER_EMAIL'],
         self._(u'[Intranet2] Missed hours'),
         response
     )
     def on_success(result):
         LOG(u'Report with missed hours - sent')
     def on_error(err):
         EXCEPTION(u'Failed to sent report with missed hours')
     deferred.addCallbacks(on_success, on_error)
     return data
コード例 #23
0
    def _send_report(self, coordinator_id, email, bugs):
        def on_success(result):
            LOG(u'Monthly report with old bugs - sent')

        def on_error(err):
            EXCEPTION(u'Failed to sent Monthly report with old bugs')

        # Bugs filtering & ordering
        # Coordinator gets bugs from his projects, manager gets bugs from
        # all projects
        if coordinator_id is None:  # Manager
            bugs_filtered = sorted(
                bugs,
                key=lambda b: b.changeddate.replace(tzinfo=None),
            )
            title = u'Lista najstarszych niezamkniętych bugów\nwe wszystkich projektach'
        else:  # Coordinator
            bugs_filtered = sorted(
                [
                    b
                    for b in bugs if b.project.coordinator_id == coordinator_id
                ],
                key=lambda b: b.changeddate.replace(tzinfo=None),
            )
            title = u'Lista najstarszych niezamkniętych bugów\nw projektach w których jesteś koordynatorem'
        if bugs_filtered:
            data = {
                'bugs': bugs_filtered[:20],
                'title': self._(title),
            }
            response = render(
                'intranet3:templates/_email_reports/old_bugs_report.html',
                data,
                request=self.request)
            deferred = EmailSender.send_html(
                email, self._(u'[Intranet3] Old bugs report'), response)
            deferred.addCallbacks(on_success, on_error)
コード例 #24
0
ファイル: bugs.py プロジェクト: KenjiTakahashi/intranet
    def _send_report(self, coordinator_id, email, bugs):
        def on_success(result):
            LOG(u'Monthly report with old bugs - sent')
        def on_error(err):
            EXCEPTION(u'Failed to sent Monthly report with old bugs')

        # Bugs filtering & ordering
        # Coordinator gets bugs from his projects, manager gets bugs from
        # all projects
        if coordinator_id is None: # Manager
            bugs_filtered = sorted(
                bugs,
                key=lambda b: b.changeddate.replace(tzinfo=None),
            )
            title = u'Lista najstarszych niezamkniętych bugów\nwe wszystkich projektach'
        else: # Coordinator
            bugs_filtered = sorted(
                [b for b in bugs if b.project.coordinator_id == coordinator_id],
                key=lambda b: b.changeddate.replace(tzinfo=None),
            )
            title = u'Lista najstarszych niezamkniętych bugów\nw projektach w których jesteś koordynatorem'
        if bugs_filtered:
            data = {
                'bugs': bugs_filtered[:20],
                'title': self._(title),
            }
            response = render(
                'intranet3:templates/_email_reports/old_bugs_report.html',
                data,
                request=self.request
            )
            deferred = EmailSender.send_html(
                email,
                self._(u'[Intranet3] Old bugs report'),
                response
            )
            deferred.addCallbacks(on_success, on_error)
コード例 #25
0
    def _send_report(self, coordinator, email, bugs):
        def on_success(result):
            LOG(u'Monthly report with old bugs - sent')

        def on_error(err):
            EXCEPTION(u'Failed to sent Monthly report with old bugs')

        if coordinator in bugs:
            data = {
                'bugs':
                bugs[coordinator][1][:20],
                'title':
                self.
                _(u'Lista najstarszych niezamkniętych bugów\nw projektach w których jesteś koordynatorem'
                  )
            }

            response = render(
                'intranet3:templates/_email_reports/old_bugs_report.html',
                data,
                request=self.request)
            deferred = EmailSender.send_html(
                email, self._(u'[Intranet2] Old bugs report'), response)
            deferred.addCallbacks(on_success, on_error)
コード例 #26
0
ファイル: times.py プロジェクト: KenjiTakahashi/intranet
    def _today_hours(self, date, projects, omit_users):
        time_entries = (
            self.session.query(
                "user", "description", "time", "project", "client", "ticket_id", "tracker_id", "total_time"
            )
            .from_statement(
                """
                SELECT
                    u.name as "user", t.description as "description",
                    t.time as "time", p.name as "project", c.name as "client",
                    t.ticket_id as "ticket_id", p.tracker_id as "tracker_id",
                    (
                        SELECT SUM(te.time)
                        FROM time_entry te
                        WHERE te.ticket_id=t.ticket_id
                    ) as "total_time"
                FROM
                    time_entry as t, project as p, client as c, "user" as u
                WHERE
                    t.deleted = False AND
                    t.date = :date AND
                    u.id = t.user_id AND
                    p.id = t.project_id AND
                    c.id = p.client_id AND
                    p.id IN :projects AND
                    u.id NOT IN :users
                ORDER BY u.name, c.name, p.name
            """
            )
            .params(date=date, projects=tuple(projects), users=tuple(omit_users))
            .all()
        )

        if not time_entries:
            s = u"No time entries for report with hours added on %s" % date
            LOG(s)
            return s

        output = []
        total_sum = 0
        user_sum = defaultdict(lambda: 0.0)
        user_entries = defaultdict(lambda: [])
        trackers = {}
        for (user, description, time, project, client, ticket_id, tracker_id, total_time) in time_entries:
            # Lazy dict filling
            if not tracker_id in trackers:
                trackers[tracker_id] = Tracker.query.get(tracker_id)
            tracker = trackers[tracker_id]
            ticket_url = tracker.get_bug_url(ticket_id)

            total_sum += time
            user_sum[user] += time
            user_entries[user].append((description, time, project, client, ticket_id, ticket_url, total_time))

        output.append(self._(u"Daily hours report (${total_sum} h)", total_sum="%.2f" % total_sum))

        user_entries = sorted(user_entries.iteritems(), key=lambda u: user_sum[u[0]], reverse=True)
        for user, entries in user_entries:
            entries = sorted(entries, key=itemgetter(1), reverse=True)
            output.append(u"")
            output.append(u"\t%s (%.2f h):" % (user, user_sum[user]))

            for (description, time, project, client, ticket_id, bug_url, total_time) in entries:
                if ticket_id:
                    ticket_id = '[<a href="%s">%s</a>] ' % (bug_url, ticket_id)
                else:
                    ticket_id = ""
                total_time = " (%.2fh)" % total_time if ticket_id else ""
                output.append(
                    u"\t\t- %s / %s / %s%s - %.2fh%s" % (client, project, ticket_id, description, time, total_time)
                )

        message = u"<br />\n".join(output).replace("\t", "&emsp;&emsp;")

        def on_success(result):
            LOG(u"Report with hours added on %s - sent" % (date,))

        def on_error(err):
            EXCEPTION(u"Failed to sent Report with hours added on %s" % (date,))

        topic = self._(u"[intranet] Daily hours report")
        deferred = EmailSender.send_html(config["MANAGER_EMAIL"], topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Report with hours on %s - started" % (date,))
        return message
コード例 #27
0
ファイル: times.py プロジェクト: pytlakp/intranet-1
    def _today_hours(self, date, projects, omit_users):
        time_entries = (
            self.session.query("user", "description", "time", "project", "client", "ticket_id")
            .from_statement(
                """
        SELECT
            u.name as "user", t.description as "description",
            t.time as "time", p.name as "project", c.name as "client",
            t.ticket_id as "ticket_id"
        FROM
            time_entry as t, project as p, client as c, "user" as u
        WHERE
            t.deleted = False AND
            t.date = :date AND
            u.id = t.user_id AND
            p.id = t.project_id AND
            c.id = p.client_id AND
            p.id IN :projects AND
            u.id NOT IN :users
        ORDER BY u.name, c.name, p.name
    """
            )
            .params(date=date, projects=tuple(projects), users=tuple(omit_users))
            .all()
        )

        if not time_entries:
            LOG(u"No time entries for report with hours added on %s" % (date,))
            return u"No time entries for report with hours added on %s" % (date,)

        output = []
        total_sum = 0
        user_sum = defaultdict(lambda: 0.0)
        user_entries = defaultdict(lambda: [])

        for user, description, time, project, client, ticket_id in time_entries:
            total_sum += time
            user_sum[user] += time
            user_entries[user].append((description, time, project, client, ticket_id))

        output.append(self._(u"Daily hours report (${total_sum} h)", total_sum="%.2f" % total_sum))

        for user, entries in user_entries.iteritems():
            output.append(u"")
            output.append(u"\t%s (%.2f h):" % (user, user_sum[user]))

            for description, time, project, client, ticket_id in entries:
                ticket_id = ticket_id and "[%s] " % ticket_id or u""
                output.append(u"\t\t- %s / %s / %s%s %.2f h" % (client, project, ticket_id, description, time))

        message = u"\n".join(output)

        def on_success(result):
            LOG(u"Report with hours added on %s - sent" % (date,))

        def on_error(err):
            EXCEPTION(u"Failed to sent Report with hours added on %s" % (date,))

        topic = self._(u"[intranet] Daily hours report")
        deferred = EmailSender.send(config["MANAGER_EMAIL"], topic, message)
        deferred.addCallbacks(on_success, on_error)
        LOG(u"Report with hours on %s - started" % (date,))
        return message