Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 KB | None | 0 0
  1. function onOpen()
  2. {
  3. var ss = SpreadsheetApp.getActiveSpreadsheet();
  4. var searchMenuEntries = [ {name: "Отчет за сентябрь", functionName: "test"}];
  5. ss.addMenu("Kaiten.io", searchMenuEntries);
  6. }
  7.  
  8. function getInfo(urlparams)
  9. {
  10. var USERNAME = 'makcrx';
  11. var PASSWORD = '6UJrDSYY';
  12. var apiUrl = 'https://analitika.kaiten.io/api/v1/';
  13.  
  14. var headers = {
  15. "Authorization" : "Basic " + Utilities.base64Encode(USERNAME + ':' + PASSWORD)
  16. };
  17.  
  18. var params = {
  19. "method":"GET",
  20. "headers":headers
  21. };
  22.  
  23. var url = apiUrl + urlparams;
  24. var response = UrlFetchApp.fetch(url, params);
  25.  
  26. return JSON.parse(response.getContentText());
  27. }
  28.  
  29. function getTimelogs(cardID) {
  30. var dataSet = getInfo('cards/' + cardID + '/time-logs');
  31. return dataSet;
  32. }
  33.  
  34. function test() {
  35. getReport({
  36. board_id: 6111,
  37. updated_after: '2017-09-01',
  38. updated_before: '2017-10-01',
  39. limit: 99999,
  40. });
  41. }
  42.  
  43. function getReport(params) {
  44. var main = SpreadsheetApp.getActiveSpreadsheet();
  45.  
  46. var p = [];
  47. for (var key in params) {
  48. var value = params[key];
  49. p.push(key + '=' + value);
  50. }
  51. var urlparams = p.join('&');
  52. //var dataSet = getInfo('cards?board_id=6111&updated_after=' + params.updated_after + '&limit=99999');
  53. var dataSet = getInfo('cards?' + urlparams);
  54.  
  55. // названия колонок
  56. var colnames = ['Card ID', 'Name', 'Type', 'Tags', 'Status'];
  57. var personnames = ['Максим Шулин', 'Вячеслав Нестеренко', 'Алексей Зубарев', 'Марина Юрочкина'];
  58. colnames = colnames.concat(personnames);
  59.  
  60. var rows = {};
  61.  
  62. for (i = 0; i < dataSet.length; i++) {
  63. data = dataSet[i];
  64.  
  65. var cardID = data.id;
  66. var cardName = data.title;
  67. var cardType = data.type ? data.type.name : '';
  68.  
  69. var tags = [];
  70. if (data.tags)
  71. for (j = 0; j < data.tags.length; j++) {
  72. tags.push(data.tags[i] ? data.tags[i].name : '');
  73. }
  74. tags = tags.join(', ');
  75.  
  76. var status = data.column.title;
  77. var updated = data.updated;
  78.  
  79. // API-запрос логов
  80. var timelogs = getTimelogs(cardID);
  81.  
  82. var times = {};
  83. for (j = 0; j < personnames.length; j++) {
  84. var name = personnames[j];
  85. times[name] = '';
  86. }
  87.  
  88. if (timelogs)
  89. for (j = 0; j < timelogs.length; j++) {
  90. var log = timelogs[j];
  91.  
  92. var name = log.user.full_name;
  93. var time = log.time_spent;
  94.  
  95. if (times[name] != '')
  96. times[name] += time;
  97. else
  98. times[name] = time;
  99. }
  100.  
  101. // помещаем данные для отображения в таблице в rows
  102. if (status == 'Согласование' || status == 'Готово' || status == 'Принято') {
  103. if (!rows[cardType]) {
  104. rows[cardType] = [];
  105. rows[cardType].push(colnames);
  106. }
  107.  
  108. var row = [cardID, cardName, cardType, tags, status];
  109. for (j=0; j < personnames.length; j++) {
  110. var name = personnames[j];
  111. var time = times[name];
  112. row.push(time);
  113. }
  114.  
  115. rows[cardType].push(row);
  116. }
  117. }
  118.  
  119.  
  120. // Отображаем данные в таблицах
  121. for (cardType in rows) {
  122. var sheet = main.getSheetByName(cardType);
  123. if (!sheet)
  124. sheet = main.insertSheet(cardType);
  125.  
  126. dataRange = sheet.getRange(1, 1, rows[cardType].length, colnames.length);
  127. dataRange.setValues(rows[cardType]);
  128.  
  129. // Total
  130. sheet.getRange(1, 10).setValue('Total/hr');
  131. sheet.getRange(2, 10, rows[cardType].length-1, 1).setFormulaR1C1("=SUM(R[0]C[-4]:R[0]C[-1])/60");
  132.  
  133. // Результирующая строка
  134. sheet.getRange(rows[cardType].length + 1, 2).setValue('Итого:');
  135. sheet.getRange(rows[cardType].length + 1, 3).setFormulaR1C1("=COUNTA(R[-" + (rows[cardType].length - 1) + "]C[0]:R[-1]C[0])");
  136. sheet.getRange(rows[cardType].length + 1, 6, 1, personnames.length + 1).setFormulaR1C1("=SUM(R[-" + (rows[cardType].length - 1) + "]C[0]:R[-1]C[0])");
  137.  
  138. // Format
  139. sheet.getRange(1, 1, 1, 20).setFontWeight('bold');
  140. sheet.getRange(rows[cardType].length + 1, 1, 1, 20).setFontWeight('bold');
  141. sheet.getRange(1, 10, rows[cardType].length + 1, 1).setNumberFormat('0.00');
  142. sheet.getRange(1, 1, rows[cardType].length + 1, 2).setHorizontalAlignment("left");
  143. sheet.getRange(1, 3, rows[cardType].length + 1, 20).setHorizontalAlignment("right");
  144. sheet.getRange(rows[cardType].length + 1, 2).setHorizontalAlignment("right");
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement