iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
  • 先說結論,當我產出了自己部門的工作時,我都傻眼了
  • 有些沒有更新任務清單的同事、有些沒人認領的任務
  • 同事之間的任務風格分開看還好,擺在一起看的話就跳痛了
  • 我覺得老闆看完會罵人,哈哈

實作需求

  • 透過 python 的指令互動來操作試用可行性後,才去改寫原始碼;在這之前要先切換到先前建好的虛擬環境
    python
    
  1. 如何列出所有團隊?
    from libs.kanban import Kanban
    kb = Kanban()
    kb.get_teams_in_workspace()
    
    • 呼叫 Kanban 的 get_teams_in_workspace 方法,會去修改 Kanban 實例 kb 的 teams 屬性,並且將透過 API 拉回來的的資訊更新到 teams 屬性中。
    • 因為我先前已將 get_teams_in_workspace 呼叫包進建構子中。除非你要給不同的 workspace gid,不然其實這麼做是多餘的
    • 看看 teams 內容
    kb.teams
    
    https://ithelp.ithome.com.tw/upload/images/20230914/20141784bzAhzDomxZ.png
    • 於是再拿回上述內容後,應該要寫一個迴圈,即可逐項列出「指定團隊」
      • xxx的第一個百獸戰隊
      • ooo的第一個團隊
      • zzz的第一個團隊
      • R&D center
      • sss的第一個團隊
      • 人力資源
      • AA設計組
      • 材料xxx組
      • 法規組
      • cc開發團隊
      • vv開發組
  2. 如何在指定團隊後,列出所有專案?
    • 先看看 get_projects_in_team(self, team_gid=None) 的用法
    get_projects_in_team(team_gid='120xxxxxx')
    
    • 再去取出 kb.projects
      https://ithelp.ithome.com.tw/upload/images/20230914/201417842FMypnwczu.png
    • 只要在迴圈裡,把團隊 gid 吐給 get_projects_in_team(team_gid='120xxxxxx')
    for team_id, team_name in kb.teams.items():
        to_insert = input(f'加入組別: {team_name} ?(輸入Y或y新增)')
        if to_insert in 'Yy':
            kb.get_projects_in_team(team_id)
        else:
            print(f'略過組別: {team_name}')
    
  3. 如何在指定專案後,列出所有參與者?
    • 我發現之前 Kanban 少了這個方法,馬上寫一個
    def get_users_in_team(self, team_gid=None):
        try:
            # create an instance of the API class
            api_instance = asana.UsersApi(self.client)
            if team_gid is None:
                team_gid = self.default['my_team_gid']
            # Get multiple users
            api_response = api_instance.get_users_for_team(team_gid)
            data = api_response.to_dict()['data']
            self.users = {}
            for d in data:
                self.users[d['gid']] = d['name']
        except ApiException as e:
            print("Exception when calling UsersApi->get_users_in_team: %s\n" % e)
    
    • 記得要在 Kanban 的屬性中補上 self.users 表示每次透過 get_users_in_team 更新關注專案的成員
    • 在 PPTBoss 產簡報迴圈中,給 project gid 換取成員
  4. 如何在指定參與者後,列出他的所有任務?
    • 這個就是前兩篇實作的部分

結論

  • 互動輸入體驗不太好
  • 程式碼如下,詳情請見 github
  • 看起來真的很醜,需要再花時間切割與調整
def gen_prs_content_pages(self):
    for team_id, team_name in self.kb.teams.items():
        to_insert = 'N'
        to_insert = input(f'加入組別: {team_name} ?(Y或y新增)')
        if to_insert in 'Yy':
            self.kb.get_users_in_team(team_id)
            self.kb.get_projects_in_team(team_id)
            for project_id, project_name in self.kb.projects.items():
                to_insert = 'Y'
                # to_insert = input(f'加入專案: {project_name} ?(Y?)')
                if to_insert in 'Yy':
                    # self.kb.get_tasks_in_project(project_id)
                    for user in self.kb.users.keys():
                        self.kb.get_tasks_in_project_details(assignee_gid=user, project_gid=project_id)
                        self.kb.clean_empty_values_in_my_tasks()
                        for task_id in self.kb.my_tasks.keys():
                            print(f"{self.kb.my_tasks[task_id]}")
                            if self.kb.my_tasks[task_id]['name'] == '無名氏':
                                break
                            content_slide_layout = self.prs.slide_layouts[1]
                            slide = self.prs.slides.add_slide(content_slide_layout)

                            title = slide.shapes[0]
                            title.text = f"{self.kb.my_tasks[task_id]['name']} - {self.kb.my_tasks[task_id]['assignee']['name']}"

                            body_shape = slide.placeholders[1]
                            tf = body_shape.text_frame
                            if 'start_on' not in self.kb.my_tasks[task_id].keys():
                                continue
                            if 'due_on' not in self.kb.my_tasks[task_id].keys():
                                continue
                            start_on = self.kb.my_tasks[task_id]['start_on'].strftime("%Y-%m-%d")
                            due_on = self.kb.my_tasks[task_id]['due_on'].strftime("%Y-%m-%d")
                            is_completed = self.kb.my_tasks[task_id]['completed']
                            tf.text = f"任務名稱:{self.kb.my_tasks[task_id]['name']}\n"
                            tf.text += f"指派給: {self.kb.my_tasks[task_id]['assignee']['name']}\n"
                            tf.text += f"預定時間:{start_on} ~ {due_on}\n"
                            if is_completed:
                                tf.text += f"狀態:{self.kb.my_tasks[task_id]['completed_at'].strftime('%Y-%m-%d')} 完成"
                            elif self.kb.my_tasks[task_id]['start_on'] > date.today():
                                tf.text += f"狀態: 尚未開始"
                            else:
                                tf.text += f"狀態: 進行中..."
                else:
                    print(f'略過專案: {project_name}')
                    continue
        else:
            print(f'略過組別: {team_name}')
            continue
  • 下一篇,決定先不再玩 Asana 的部分囉,要開始弄點別的內容

上一篇
Day 12 - 透過 Kanban 類別中的方法實作成員清單、作法討論
下一篇
Day 14 - 調查甘特圖製作方法
系列文
挽救肝指數 x 職場生存術 x 老闆愛看的投影片製造機30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言