def team_24_recommend_allocation_handler() -> Response: """ TEAM_24_RECOMMEND_ALLOCATION handler :return: """ allocation_table = list() jira_account = get_jira_account() users = get_project_users_without_pm() q = "project = {project} AND assignee = '{user}' AND status IN ('To Do', 'In Progress') ORDER BY issuekey" total = 0 for user in users: q_user = q.format(project=config.get('jira', 'project'), user=user) tasks, tasks_count_msg = get_jira_tasks(q_user, jira_account) allocation_table.append((user, len(tasks))) total += len(tasks) tasks, tasks_count_msg = get_backlog(jira_account) if tasks_count_msg == _("NONE"): return _("NO_BACKLOG") summary = allocate_backlog(tasks, allocation_table, total, users) msg = _("RECOMMENDER_INTRO") for usr, ts in summary.items(): msg += _("RECOMMENDER_SG", tasks=format_enumeration(ts)) if len(ts) == 1 else _( "RECOMMENDER_PL", tasks=format_enumeration(ts)) + _("TO") + " " + usr + ". " response = Response(msg) return response
def team_24_project_status_handler() -> Response: """ TEAM_24_PROJECT_STATUS handler :return: """ urgent_q = 'project = {project} AND status IN ("To Do") and priority in (Highest)'.\ format(project=config.get('jira', 'project')) overdue_q = 'project = {project} AND duedate < Now() and status in ("In Progress", "To Do")'.\ format(project=config.get('jira', 'project')) jira_account = get_jira_account() todo_tasks, todo_tasks_count_msg = get_jira_tasks(get_board_query("To Do"), jira_account) inprogress_tasks, inprogress_tasks_count_msg = get_jira_tasks( get_board_query("In Progress"), jira_account) done_tasks, done_tasks_count_msg = get_jira_tasks(get_board_query("Done"), jira_account) urgent_tasks, urgent_tasks_count_msg = get_jira_tasks( urgent_q, jira_account) overdue_tasks, overdue_tasks_count_msg = get_jira_tasks( overdue_q, jira_account) idle_users = get_idle_users(jira_account) msg = _("SPRINT_STATUS", project=config.get('jira', 'project'), todos=todo_tasks_count_msg, inprogress=inprogress_tasks_count_msg, done=done_tasks_count_msg) msg += " " + _("PROJECT_STATUS_INTRO", project=config.get('jira', 'project'), urgent_tasks=urgent_tasks_count_msg, overdue_tasks=overdue_tasks_count_msg) if len(idle_users) > 0: verb = _("ARE") if len(idle_users) == 1: verb = _("IS") user_str = format_enumeration(idle_users) msg_idle = " " + _("IDLE_USERS", users=user_str, verb=verb) msg += msg_idle response = Response(msg) return response
def get_done_tasks(): msg_done_tasks = _("NO_DONE_TASKS") today = date.today().strftime("%Y-%m-%d") tomorrow = (date.today() + timedelta(days=1)).strftime("%Y-%m-%d") done_q = 'project = {project} AND status changed during ({today}, {tomorrow}) to Done'. \ format(project=config.get('jira', 'project'), today=today, tomorrow=tomorrow) done_tasks, done_tasks_count_msg = get_jira_tasks(done_q) return done_tasks, done_tasks_count_msg, msg_done_tasks
def get_idle_users(jira_account): users = get_project_users() idle_q = "project = {project} AND assignee = '{user}' AND status IN ('In Progress') ORDER BY issuekey" idle_users = [] for user in users: idle_q_user = idle_q.format(project=config.get('jira', 'project'), user=user) in_progress_tasks, in_progress_tasks_count_msg = get_jira_tasks( idle_q_user, jira_account) if in_progress_tasks_count_msg == _("NONE"): idle_users.append(user) return idle_users
def team_24_call_handler(username: str) -> Response: """ TEAM_24_COWORKER_STATUS handler :param username: str :return: """ user = clarify_user(username) jira_account = get_jira_account() todo_tasks, todo_tasks_count_msg = get_jira_tasks( get_user_board_query("To Do", user), jira_account) inprogress_tasks, inprogress_tasks_count_msg = get_jira_tasks( get_user_board_query("In Progress", user), jira_account) done_tasks, done_tasks_count_msg = get_jira_tasks( get_user_board_query("Done", user), jira_account) msg = _("COWORKER_STATUS", username=username, todos=todo_tasks_count_msg, inprogress=inprogress_tasks_count_msg, done=done_tasks_count_msg) if inprogress_tasks_count_msg != _("NONE"): msg += " " + _("COWORKER_INPROGRESS", username=user, tasks=format_enumeration(inprogress_tasks)) urgent_q = 'project = {project} AND assignee = "{username}" AND status IN ("To Do") and priority in (Highest)'. \ format(project=config.get('jira', 'project'), username=user) overdue_q = 'project = {project} AND assignee = "{username}" AND duedate < Now() and status in ("In Progress", ' \ '"To Do")'. \ format(project=config.get('jira', 'project'), username=user) urgent_tasks, urgent_tasks_count_msg = get_jira_tasks( urgent_q, jira_account) if urgent_tasks_count_msg != _("NONE"): msg += _("COWORKER_URGENT", username=user, tasks=format_enumeration(urgent_tasks)) + "." overdue_tasks = get_jira_tasks_with_due_dates(overdue_q, jira_account) overdue_tasks_count = len(overdue_tasks) if overdue_tasks_count > 0: msg += _("COWORKER_OVERDUE", username=user) for idx, tpl in enumerate(overdue_tasks): msg += _("OVERDUE_TASK", task=tpl[0], days=(datetime.now() - parse(tpl[1])).days) msg += ", " if idx != overdue_tasks_count - 1 else "." no_tasks_q = "project = {project} AND assignee = '{user}' AND status IN ('In Progress', 'To Do') ORDER BY issuekey".format( project=config.get('jira', 'project'), user=user) tasks, tasks_count_msg = get_jira_tasks(no_tasks_q, jira_account) if len(tasks) == 0: msg += " " + _("COWORKER_EMPTY") else: idle_tasks_q = "project = {project} AND assignee = '{user}' AND status IN ('In Progress') ORDER BY " \ "issuekey".format(project=config.get('jira', 'project'), user=user) idle_tasks, idle_tasks_count_msg = get_jira_tasks( idle_tasks_q, jira_account) if len(idle_tasks) == 0: msg += " " + _("COWORKER_IDLE") response = Response(msg) return response
def get_in_progress_tasks(): q = 'project = {project} AND assignee = currentUser() AND status IN ("In Progress") ORDER BY issuekey'. \ format(project=config.get('jira', 'project')) return get_jira_tasks(q)