Русский
Русский
English
Статистика
Реклама

Организация дел

Как создать Trello dashboard, чтобы задачи из 5 досок собирались в одной?

16.05.2021 18:12:28 | Автор: admin

Проблематика

В своей работе я столкнулся с необходимостью организации задач сотрудников департамента аналитики в едином окне и построения прозрачной схемы оценки их загруженности.

Какие есть варианты?

Сравнивая различные инструменты и таскменеджеры, выбор пал на одного из популярных игроков рынка - Trello. Однако, сразу после выбора программы, возникло новое препятствие. В бесплатной версии этого приложения отсутствовала возможность синхронизации досок нескольких сотрудников воедино без сторонних сервисов, типа Zapier, где для большого проекта тоже нужна лицензия.

В чем смысл объединения?

  1. Заходить в 5 досок и просматривать отдельно каждого, просто не хватит времени и сил.

  2. Если не синхронизировать доски на одном экране, будет крайне сложно сравнить одного сотрудника с другим по уровню текущей нагрузки.

  3. Сотрудники хотят понимать нагрузку каждого из членов команды, а для этого нужно опять же как то сводить все воедино.

Подобный функционал синхронизации бесплатно доступен у некоторых конкурентов, которые специализируются на agile таскменеджерах, но трелло просто был роднее, тк для личного контроля задач использую его уже несколько лет. Таким образом, для внедрения общего командного таскменеджера в работу департамента осталось решить всего одну проблему:

Как синхронизировать доски 5 сотрудников в одной доске "дашборде" и при этом не оплачивать лицензию в Трелло или передаточных сервисах типа Zapier?

Решение задачи:

К счастью для работы с досками trello уже создан полноценный пакет на языке R, который позволяет подключаться к API таскменеджера, и именно им я и решил воспользоваться для решения всех задач.

Ход решения:

Сначала получим ключи и секретный код для работы с API https://trello.com/app-key (предварительно необходимо авторизоваться под своей учеткой в Trello и открыть себе доски сотрудников с правами администратора)

Сохраняем ключ и токен, который можно найти внизу этой же страницы

Далее установим сам язык R. Для его подключения нужноскачатьи установить инсталляторы. Также для комфортной работы с R рекомендуюиспользоватьбесплатную среду разработки RStudio.

Для решения вышеописанной задачи нам потребуется установить пакеты для:

  • работы с API Trello trelloR

  • работы со временем и временными периодами lubridate

  • работы с таблицами и агрегации данных dplyr

Чтобы установить пакеты из основного репозитория CRAN примените базовую функцию install.packages, а для загрузки пакетов с github функцию install_github:

remotes::install_github("jchrom/trelloR")install.packages("lubridate", dependencies = TRUE)install.packages("dplyr ", dependencies = TRUE)

Подключаемся к API и получаем токен:

# Указываем путь к папке куда будет сохранен полученный tokensetwd("C:\\*********\\R_script\\trello")# Получаем tokenmy_token = get_token("my_app", key = "", secret = "",                     expiration = c( "never"))

Полученные данные применяем для того, чтобы отправить первый запрос, и пишем функцию, которая поможет упростить наш код:

trelloadd <- function(delcard = NULL,                      addcard = NULL,                      nlista = NULL){  # Находим исходный лист сотрудника в Трелло откуда будем брать карточки  для записи в дашборд  ishod_tab <- get_list_cards(addcard)    # Определяем доску куда пишем новые карточки  bid = get_id_board(delcard)    # Получаем все списки с листами на доске дашборда  lid <- get_board_lists(bid)$id[nlista]    # Получаем все карточки в необходимом листе куда пишем  cid<-get_list_cards(lid)    # Удаляем карточки, которые уже есть в листе сотрудника на дашборде  if (length(cid$id)>0) {    for (i in 1:length(cid$id)) {      delete_resource(resource = "card", id = cid$id[i])    }  }else{    print("no-del")  }    # Находим дату создания карточки в исходном листе  dateList<- data.frame(dateadd = NA)  for (i in 1:length(ishod_tab$id)) {    cardID <- ishod_tab$id[i]    dateList[i,1] <- strtoi(strtrim(cardID, 8), 16L)  }  dateList$dateadd <-as.POSIXct(dateList$dateadd, origin = "1970-01-01")    # Циклом собираем лист записи и создаем карточку для переноса в дашборд  if (length(ishod_tab$name)>0) {    for (i in 1:length(ishod_tab$name)) {        payload = list(        idList = lid,        name = ishod_tab$name[i],        desc = paste0(ishod_tab$desc[i],"Date Add: " ,dateList$dateadd[i], "                     В работе уже ", floor(as.vector(difftime(today(),dateList$dateadd[i], units='days'))), " день"),        start = ishod_tab$start [i],        due = ishod_tab$due [i],        pos = "bottom"      )      r <- create_resource("card", body = payload)    }  }else{    print("Ok")  }  if (nrow(bind_rows(ishod_tab$labels[]))>0) {      # Добавляем лейблы (метки)    bid = get_id_board(delcard)    lid <- get_board_lists(bid)$id[nlista]    cid <-get_list_cards(lid)        # Находим карточки без меток    nlab <- which( lapply(ishod_tab$labels, length)!=0 %in% T)    for (i in nlab) {      labl <- ishod_tab$labels[[i]]      for (xi in 1:nrow(labl)) {        r <-  add_label(cid$id[i], color = ishod_tab$labels[[i]][xi,4],                        name = ishod_tab$labels[[i]][xi,3] )        }    }   }else{    print("no_lable")  }}

В функции необходимо будет только заполнять переменные:

  • delcard - Это id дашборда в который будет записываться информация из досок сотрудников

  • addcard - Это id листа из которого будут браться карточки для переноса в дашборд

  • nlista - номер листа в дашборде в который будут заноситься карточки

Получаем delcard

Для получения id дашборда куда будем писать общие карточки, сначала необходимо создать эту доску в самом Трелло, а затем из поисковой строки браузера скопировать необходимый нам id

Пример ссылки: https://trello.com/b/*********/общие-задачи - где значения ****** это будет Id конкретной доскиПример ссылки: https://trello.com/b/*********/общие-задачи - где значения ****** это будет Id конкретной доски

Получаем addcard

Для того чтобы получить лист откуда будут браться исходные данные, мы точно также как с delcard копируем ссылку на доску, только теперь забираем всю ссылку целиком и используя готовую функцию извлекаем все листы на исходной доске:

get_board_lists("https://trello.com/b/*****/сотрудник1", query = list(customFieldItems = "true"))

В результате выполнения функции, прямо в консоли R мы получим перечень всех листов на доске и по названию листа можем выбрать необходимый нам id для получения карточек

Данную процедуру мы проделываем для досок всех наших сотрудников из досок которых мы планируем забирать карточки для переноса на дашборд.

Далее проходим доски всех сотрудников и перезаписываем их на общий дашборд используя функцию созданную выше:

# Сотрудник1 ####trelloadd(delcard = "od*****W",           addcard = "600**********04",          nlista = 2)# Сотрудник2 ####trelloadd(delcard = "od*****W",           addcard = "5fc4********24",          nlista = 3)# Сотрудник3 ####trelloadd(delcard = "od*****W",           addcard = "5e94*********8ce",          nlista = 4)# Сотрудник4 ####trelloadd(delcard = "od*****W",          addcard = "5faa*********c522",          nlista = 5)# Сотрудник5 ####trelloadd(delcard = "od*****W",          addcard = "60744*******3394",          nlista = 6)# Сотрудник6 ####trelloadd(delcard = "od*****W",          addcard = "5e73******b07",          nlista = 7)

Так же я продумал вопрос, связанный с тем, чтобы получать в карточки дашборда информацию о том, когда была создана исходная карточка, чтобы можно было оценить, как долго уже решается та или иная задача (ведь дедлайны можно менять). Дата привязывается к моменту создания исходной карточки. Далее настраиваемавтоматический запуск скриптадля актуализации дашборда и задаём нужное количество раз обновлений в день.

Готовый дашбордГотовый дашборд

В итоге:

  1. Мы получили полноценную синхронизацию всех досок любого числа сотрудников в trello

  2. Решили проблему с тем, чтобы наглядно иметь доступ к дате создания каждой задачи

  3. Имеем фундамент для анализа продуктивности сотрудников в любых разрезах, благодаря возможности добавлять в код новые различные улучшения расширяя код на основе Api от Trello, на основе бизнес логики вашей компании и возможностей языка R.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru