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)
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)
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")
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)
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)
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)
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)
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
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")
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)
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)
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()
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()
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()
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()