Esempio n. 1
0
 def on_start_activate(self, button):
     to_report = []
     if runtime.get_external().source == SOURCE_RT or runtime.get_external().source == SOURCE_REDMINE:
         to_report = filter(self.__is_rt_ticket, self.fact_tree.get_model())
     elif runtime.get_external().source == SOURCE_JIRA:
         to_report = filter(self.__is_jira_ticket, self.fact_tree.get_model())
     to_report = [row[0].fact for row in to_report]
     dialogs.export_rt.show(self, facts=to_report)
Esempio n. 2
0
 def on_start_activate(self, button):
     to_report = []
     if runtime.get_external().source == SOURCE_RT or runtime.get_external(
     ).source == SOURCE_REDMINE:
         to_report = filter(self.__is_rt_ticket, self.fact_tree.get_model())
     elif runtime.get_external().source == SOURCE_JIRA:
         to_report = filter(self.__is_jira_ticket,
                            self.fact_tree.get_model())
     to_report = [row[0].fact for row in to_report]
     dialogs.export_rt.show(self, facts=to_report)
Esempio n. 3
0
    def __report(self, fact_row):
        fact = fact_row.fact
        logging.warn(fact_row.name)
        if runtime.get_external().tracker:
            match = re.match(TICKET_NAME_REGEX, fact.activity)
            #            if not fact_row.selected:
            #                logging.warn("Row not selected: %s" % fact.activity)
            if fact_row.selected and fact.end_time and match:
                ticket_id = match.group(1)
                text = self.get_text(fact)
                time_worked = stuff.duration_minutes(fact.delta)
                if runtime.get_external().tracker.comment(ticket_id, text, time_worked):
                    logging.warn("updated ticket #%s: %s - %s min" % (ticket_id, text, time_worked))
                    runtime.storage.update_fact(fact.id, fact, False, True)
                    fact_row.selected = False

            else:
                logging.warn("Not a RT ticket or in progress: %s" % fact.activity)
        else:
            logging.warn("Not connected to/logged in RT")
Esempio n. 4
0
    def __add_rt_worklog(self, ticket_id, text, time_worked, facts):
        test = self.test_checkox.get_active()
#        logging.warn(_("updating ticket #%s: %s min, comment: \n%s") % (ticket_id, time_worked, text))
        if not test:
            time = time_worked
        else:
            time = 0

        if runtime.get_external().rt.comment(ticket_id, text, time) and not test:
            for fact in facts:
                runtime.storage.update_fact(fact.id, fact, False,True)
Esempio n. 5
0
    def __add_rt_worklog(self, ticket_id, text, time_worked, facts):
        test = self.test_checkox.get_active()
#        logging.warn(_("updating ticket #%s: %s min, comment: \n%s") % (ticket_id, time_worked, text))
        if not test:
            time = time_worked
        else:
            time = 0

        if runtime.get_external().rt.comment(ticket_id, text, time) and not test:
            for fact in facts:
                runtime.storage.update_fact(fact.id, fact, False, True)
Esempio n. 6
0
    def __add_jira_worklog(self, issue_id, text, time_worked, facts):
        started = min(fact.start_time for fact in facts).replace(tzinfo=tz.tzlocal())
        test = self.test_checkox.get_active()
        #        logging.warn(_("updating ticket #%s: %s min, comment: \n%s") % (ticket_id, time_worked, text))
        if not test:
            time = time_worked
        else:
            time = 0

        if runtime.get_external().jira.add_worklog(issue = issue_id, comment = text, timeSpent = "%sm" % time, started=started) and not test:
            for fact in facts:
                runtime.storage.update_fact(fact.id, fact, False,True)
Esempio n. 7
0
    def __add_jira_worklog(self, issue_id, text, time_worked, facts):
        started = min(fact.start_time for fact in facts).replace(tzinfo=tz.tzlocal())
        test = self.test_checkox.get_active()
        #        logging.warn(_("updating ticket #%s: %s min, comment: \n%s") % (ticket_id, time_worked, text))
        if not test:
            time = time_worked
        else:
            time = 0

        if runtime.get_external().jira.add_worklog(issue = issue_id, comment = text, timeSpent = "%sm" % time, started=started) and not test:
            for fact in facts:
                runtime.storage.update_fact(fact.id, fact, False, True)
Esempio n. 8
0
 def __is_jira_ticket(self, row):
     if not runtime.get_external().jira:
         logging.warn("Not connected to/logged in JIRA")
         return False
     if not isinstance(row[0], FactRow):
         return False
     #            self.__report(row[0])
     fact = row[0].fact
     match = re.match(JIRA_ISSUE_NAME_REGEX, fact.activity)
     if row[0].selected and fact.end_time and match:
         return True
     else:
         return False
Esempio n. 9
0
    def __is_jira_ticket(self, row):
        if not runtime.get_external().jira:
            logging.warn("Not connected to/logged in JIRA")
            return False
        if not isinstance(row[0], FactRow):
            return False
#            self.__report(row[0])
        fact = row[0].fact
        match = re.match(JIRA_ISSUE_NAME_REGEX, fact.activity)
        if row[0].selected and fact.end_time and match:
            return True
        else:
            return False
Esempio n. 10
0
    def __report(self, fact_row):
        fact = fact_row.fact
        logging.warn(fact_row.name)
        if runtime.get_external().tracker:
            match = re.match(TICKET_NAME_REGEX, fact.activity)
            #            if not fact_row.selected:
            #                logging.warn("Row not selected: %s" % fact.activity)
            if fact_row.selected and fact.end_time and match:
                ticket_id = match.group(1)
                text = self.get_text(fact)
                time_worked = stuff.duration_minutes(fact.delta)
                if runtime.get_external().tracker.comment(
                        ticket_id, text, time_worked):
                    logging.warn("updated ticket #%s: %s - %s min" %
                                 (ticket_id, text, time_worked))
                    runtime.storage.update_fact(fact.id, fact, False, True)
                    fact_row.selected = False

            else:
                logging.warn("Not a RT ticket or in progress: %s" %
                             fact.activity)
        else:
            logging.warn("Not connected to/logged in RT")
Esempio n. 11
0
 def __add_redmine_worklog(self, issue_id, spent_on, hours, comments, facts):
     test = self.test_checkox.get_active()
     logging.warn(_("updating issue #%s: %s hrs, comment: \n%s") % (issue_id, hours, comments))
     time_entry_data = {'time_entry': {}}
     time_entry_data['time_entry']['issue_id'] = issue_id
     time_entry_data['time_entry']['spent_on'] = spent_on
     time_entry_data['time_entry']['hours'] = hours
     time_entry_data['time_entry']['comments'] = comments
     time_entry_data['time_entry']['activity_id'] = 9
     
     r = runtime.get_external().redmine.createTimeEntry(time_entry_data)
     logging.warn(r.status_code)
     logging.warn(r.content)
     if r.status_code == 201 and not test:
         for fact in facts:
             runtime.storage.update_fact(fact.id, fact, False,True)
Esempio n. 12
0
    def __add_redmine_worklog(self, issue_id, spent_on, hours, comments, facts):
        test = self.test_checkox.get_active()
        logging.warn(_("updating issue #%s: %s hrs, comment: \n%s") % (issue_id, hours, comments))
        time_entry_data = {'time_entry': {}}
        time_entry_data['time_entry']['issue_id'] = issue_id
        time_entry_data['time_entry']['spent_on'] = spent_on
        time_entry_data['time_entry']['hours'] = hours
        time_entry_data['time_entry']['comments'] = comments
        time_entry_data['time_entry']['activity_id'] = 9

        r = runtime.get_external().redmine.createTimeEntry(time_entry_data)
        logging.warn(r.status_code)
        logging.warn(r.content)
        if r.status_code == 201 and not test:
            for fact in facts:
                runtime.storage.update_fact(fact.id, fact, False, True)
Esempio n. 13
0
    def on_start_activate(self, button):
        if runtime.get_external().rt or runtime.get_external().redmine or runtime.get_external().jira:
            group_comments = self.aggregate_comments_checkbox.get_active()
            it = self.tree_store.get_iter_first()
            to_report_list = []
            while it:
                ticket_row = self.tree_store.get_value(it, 0)
                child_iter = self.tree_store.iter_children(it)
                #get children
                export_rows = []
                while child_iter:
                    export_rows.append(self.tree_store.get_value(child_iter, 0))
                    child_iter = self.tree_store.iter_next(child_iter)
                #report tickets
                if group_comments:
                    comment = "\n".join("%s - %s min"% (row.comment, row.time_worked) for row in export_rows)
                    time_worked = sum([row.time_worked for row in export_rows])
                    facts = [row.fact for row in export_rows]
                    to_report_list.append({
                        'id':ticket_row.id,
                        'name':ticket_row.name,
                        'comment':comment,
                        'time':time_worked,
                        'facts':facts,
                        'date': row.date
                    })
                else:
                    for row in export_rows:
                        to_report_list.append({
                            'id':ticket_row.id,
                            'name':ticket_row.name,
                            'comment':"%s - %s min"% (row.comment, row.time_worked),
                            'time':row.time_worked,
                            'facts':[row.fact],
                            'date': row.date
                        })
                it = self.tree_store.iter_next(it)
            to_report_len = len(to_report_list)
            self.progressbar.set_fraction(0.0)
            for i in range(to_report_len):
                to_report = to_report_list[i]
                self.progressbar.set_text(_("Reporting: #%s: %s - %smin") % (to_report['id'], to_report['name'], to_report['time']))
                self.progressbar.set_fraction(float(i)/to_report_len)
                while gtk.events_pending(): 
                    gtk.main_iteration()
                if self.source == SOURCE_RT:
                    self.__add_rt_worklog(to_report['id'], to_report['comment'], to_report['time'], to_report['facts'])
                elif self.source == SOURCE_REDMINE:
                    self.__add_redmine_worklog(to_report['id'], to_report['date'], math.ceil(to_report['time']*100/60)/100, to_report['comment'], to_report['facts'])
                elif self.source == SOURCE_JIRA:
                    self.__add_jira_worklog(to_report['id'], to_report['comment'], to_report['time'], to_report['facts'])
            self.progressbar.set_text("Done")
            self.progressbar.set_fraction(1.0)
#            for fact in self.facts:
#                match = re.match(TICKET_NAME_REGEX, fact.activity)
#                if fact.end_time and match:
#                    ticket_id = match.group(1)
#                    text = self.get_text(fact)
#                    time_worked = stuff.duration_minutes(fact.delta)
#                    logging.warn(ticket_id)
#                    logging.warn(text)
#                    logging.warn("minutes: %s" % time_worked)
##                    external.rt.comment(ticket_id, text, time_worked)
#                else:
#                    logging.warn("Not a RT ticket or in progress: %s" % fact.activity)
        else:
            logging.warn(_("Not connected to/logged in RT"))
        self.start_button.set_sensitive(False)
        #TODO only if parent is overview
        self.parent.search()
Esempio n. 14
0
    def __init__(self, parent = None, facts = None):
        gtk.Object.__init__(self)
        
        self.source = conf.get("activities_source")
                
        self._gui = load_ui_file("export_rt.ui")
        self.window = self.get_widget('report_rt_window')

        self.parent, self.facts = parent, facts

        self.done_button = self.get_widget("done_button")
#        self.done_button.set_sensitive(False)
        
#        Model
        self.tree_store = gtk.TreeStore(gobject.TYPE_PYOBJECT)
        self.rows = list([ExportRow(fact) for fact in facts])
        self.rows.sort(key = lambda row: row.id)
        grouped_rows = {}
        for issue_id, rows in groupby(self.rows, lambda export_row: export_row.id):
            grouped_rows[issue_id] = list(rows)
        for issue_id in grouped_rows.keys():
            #ściągnąć nazwę ticketa
            if self.source == SOURCE_RT:
                row_data = runtime.get_external().rt.get_ticket(issue_id)
#                 row_data['source'] = SOURCE_RT
            elif self.source == SOURCE_REDMINE:
                issue = runtime.get_external().redmine.getIssue(issue_id)
                row_data = {}
                row_data['id'] = issue.id
                row_data['Subject'] = str(issue_id)+': '+issue.fields.summary
#                 row_data['source'] = SOURCE_REDMINE
            elif self.source == SOURCE_JIRA:
                issue = runtime.get_external().jira.issue(issue_id)
                row_data = {}
                row_data['id'] = issue.key
                row_data['Subject'] = issue.fields.summary
#                 row_data['source'] = SOURCE_JIRA

            if row_data:
                parent = self.tree_store.append( None, (TicketRow(row_data), ) )
                for row in grouped_rows[issue_id]:
                    self.tree_store.append(parent, (row, ))
            
#        self.tree_store.append(parent, (row.comment))
        self.view = gtk.TreeView(self.tree_store);
        self.view.set_headers_visible(False)
        
        
        id_cell = gtk.CellRendererText()
        id_column = gtk.TreeViewColumn("", id_cell, text=0)
        id_column.set_cell_data_func(id_cell, id_painter)
        id_column.set_max_width(100)
        self.view.append_column(id_column)
        
        name_comment_cell = gtk.CellRendererText()
        name_comment_cell.connect("edited", self.on_comment_edited)
        name_comment_column = gtk.TreeViewColumn("", name_comment_cell, text=0)
        name_comment_column.set_cell_data_func(name_comment_cell, name_comment_painter)
        name_comment_column.set_expand(True)
        self.view.append_column(name_comment_column)
        
        time_cell = gtk.CellRendererSpin()
        time_cell.connect("edited", self.on_time_worked_edited)
        time_column = gtk.TreeViewColumn("", time_cell, text=0)
        time_column.set_cell_data_func(time_cell, time_painter)
        time_column.set_min_width(60)
        self.view.append_column(time_column)
        self.view.expand_all()
        
        self.start_button = self.get_widget("start_button")
        self.get_widget("activities").add(self.view)
        self.aggregate_comments_checkbox = self.get_widget("aggregate_comments_checkbox")
        self.test_checkox = self.get_widget("test_checkbox")
        self.test_checkox.set_active(False)
        self.progressbar = self.get_widget("progressbar")
        self.progressbar.set_text(_("Waiting for action"))
        self.progressbar.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT)
        
        self._gui.connect_signals(self)

        self.window.show_all()
Esempio n. 15
0
 def on_start_activate(self, button):
     if runtime.get_external().rt or runtime.get_external().redmine or runtime.get_external().jira:
         group_comments = self.aggregate_comments_checkbox.get_active()
         it = self.tree_store.get_iter_first()
         to_report_list = []
         while it:
             ticket_row = self.tree_store.get_value(it, 0)
             child_iter = self.tree_store.iter_children(it)
             # get children
             export_rows = []
             while child_iter:
                 export_rows.append(self.tree_store.get_value(child_iter, 0))
                 child_iter = self.tree_store.iter_next(child_iter)
             # report tickets
             if group_comments:
                 comment = "\n".join("%s - %s min" % (row.comment, row.time_worked) for row in export_rows)
                 time_worked = sum([row.time_worked for row in export_rows])
                 facts = [row.fact for row in export_rows]
                 to_report_list.append({
                     'id': ticket_row.id,
                     'name': ticket_row.name,
                     'comment': comment,
                     'time': time_worked,
                     'facts': facts,
                     'date': row.date
                 })
             else:
                 for row in export_rows:
                     to_report_list.append({
                         'id': ticket_row.id,
                         'name': ticket_row.name,
                         'comment': "%s - %s min" % (row.comment, row.time_worked),
                         'time': row.time_worked,
                         'facts': [row.fact],
                         'date': row.date
                     })
             it = self.tree_store.iter_next(it)
         to_report_len = len(to_report_list)
         self.progressbar.set_fraction(0.0)
         for i in range(to_report_len):
             to_report = to_report_list[i]
             self.progressbar.set_text(_("Reporting: #%s: %s - %smin") % (to_report['id'], to_report['name'], to_report['time']))
             self.progressbar.set_fraction(float(i)/to_report_len)
             while gtk.events_pending():
                 gtk.main_iteration()
             if self.source == SOURCE_RT:
                 self.__add_rt_worklog(to_report['id'], to_report['comment'], to_report['time'], to_report['facts'])
             elif self.source == SOURCE_REDMINE:
                 self.__add_redmine_worklog(
                     to_report['id'],
                     to_report['date'],
                     math.ceil(to_report['time']*100/60)/100,
                     to_report['comment'],
                     to_report['facts']
                 )
             elif self.source == SOURCE_JIRA:
                 self.__add_jira_worklog(to_report['id'], to_report['comment'], to_report['time'], to_report['facts'])
         self.progressbar.set_text("Done")
         self.progressbar.set_fraction(1.0)
     else:
         logging.warn(_("Not connected to/logged in RT"))
     self.start_button.set_sensitive(False)
     # TODO only if parent is overview
     self.parent.search()
Esempio n. 16
0
    def __init__(self, parent=None, facts=None):
        gtk.Object.__init__(self)

        self.source = conf.get("activities_source")

        self._gui = load_ui_file("exporter.ui")
        self.window = self.get_widget('exporter_window')

        self.parent, self.facts = parent, facts

        self.done_button = self.get_widget("done_button")

#        Model
        self.tree_store = gtk.TreeStore(gobject.TYPE_PYOBJECT)
        self.rows = list([ExportRow(fact) for fact in facts])
        self.rows.sort(key = lambda row: row.id)
        grouped_rows = {}
        for issue_id, rows in groupby(self.rows, lambda export_row: export_row.id):
            grouped_rows[issue_id] = list(rows)
        for issue_id in grouped_rows.keys():
            # ściągnąć nazwę ticketa
            row_data = None
            if self.source == SOURCE_RT:
                row_data = runtime.get_external().rt.get_ticket(issue_id)
            elif self.source == SOURCE_REDMINE:
                issue = runtime.get_external().redmine.getIssue(issue_id)
                row_data = {'id': issue.id, 'Subject': str(issue_id) + ': ' + issue.fields.summary}
            elif self.source == SOURCE_JIRA and runtime.get_external().is_issue_from_existing_jira_project(issue_id):
                try:
                    issue = runtime.get_external().jira.issue(issue_id)
                    row_data = {'id': issue.key, 'Subject': issue.fields.summary}
                except:
                    logging.error("Issue not found: %s" % (issue_id))

            if row_data:
                parent = self.tree_store.append(None, (TicketRow(row_data),))
                for row in grouped_rows[issue_id]:
                    self.tree_store.append(parent, (row, ))

        self.view = gtk.TreeView(self.tree_store)
        self.view.set_headers_visible(False)

        id_cell = gtk.CellRendererText()
        id_column = gtk.TreeViewColumn("", id_cell, text=0)
        id_column.set_cell_data_func(id_cell, id_painter)
        id_column.set_max_width(100)
        self.view.append_column(id_column)

        name_comment_cell = gtk.CellRendererText()
        name_comment_cell.connect("edited", self.on_comment_edited)
        name_comment_column = gtk.TreeViewColumn("", name_comment_cell, text=0)
        name_comment_column.set_cell_data_func(name_comment_cell, name_comment_painter)
        name_comment_column.set_expand(True)
        self.view.append_column(name_comment_column)

        time_cell = gtk.CellRendererSpin()
        time_cell.connect("edited", self.on_time_worked_edited)
        time_column = gtk.TreeViewColumn("", time_cell, text=0)
        time_column.set_cell_data_func(time_cell, time_painter)
        time_column.set_min_width(60)
        self.view.append_column(time_column)
        self.view.expand_all()

        self.start_button = self.get_widget("start_button")
        self.get_widget("activities").add(self.view)
        self.aggregate_comments_checkbox = self.get_widget("aggregate_comments_checkbox")
        self.test_checkox = self.get_widget("test_checkbox")
        self.test_checkox.set_active(False)
        self.progressbar = self.get_widget("progressbar")
        self.progressbar.set_text(_("Waiting for action"))
        self.progressbar.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT)

        self._gui.connect_signals(self)

        self.window.show_all()