DimensionSlip

Fix for Code.gs of CR Chart/Thread Tracker Automation

Nov 23rd, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.65 KB | None | 0 0
  1. /**
  2. * Script by DimensionSlip
  3. * <s>Original OC do not steal</s>
  4. *
  5. * Last Updated: 2017/11/24
  6. */
  7.  
  8. var NAME_INDEX = 0;
  9. var SORT_INDEX = 6;
  10.  
  11. var TH_DATE_INDEX = 0;
  12. var TH_NAME_INDEX = 1;
  13. var TH_JOURNAL_INDEX = 2;
  14. var TH_URL_INDEX = 3;
  15. var TH_STATUS_INDEX = 4;
  16. var TH_TITLE_INDEX = 5;
  17. var TH_DESC_INDEX = 6;
  18. var TH_CHARA_COUNT_INDEX = 7;
  19.  
  20. function onOpen() {
  21. var ui = SpreadsheetApp.getUi();
  22. ui.createMenu('Automations')
  23. .addItem('Generate CR Chart', 'generateCRChart')
  24. .addItem('Generate Thread Tracker', 'generateThreadTracker')
  25. .addToUi();
  26. }
  27.  
  28. function generateCRChart() {
  29. var output = HtmlService
  30. .createTemplateFromFile("cr")
  31. .evaluate();
  32.  
  33. var codeOutput = output.getContent();
  34. var ui = SpreadsheetApp.getUi();
  35.  
  36. var app = UiApp.createApplication().setWidth(400).setHeight(400);
  37. var html = app.createHTML();
  38.  
  39. html.setText(codeOutput);
  40. app.add(html);
  41. ui.showModelessDialog(app,'C/P this thing (click on the text, then Ctrl + A, Ctrl + C)');
  42. }
  43.  
  44. function generateThreadTracker() {
  45. var output = HtmlService
  46. .createTemplateFromFile("tracker")
  47. .evaluate();
  48.  
  49. var codeOutput = output.getContent();
  50. var ui = SpreadsheetApp.getUi();
  51.  
  52. var app = UiApp.createApplication().setWidth(400).setHeight(400);
  53. var html = app.createHTML();
  54.  
  55. html.setText(codeOutput);
  56. app.add(html);
  57. ui.showModelessDialog(app,'C/P this thing (click on the text, then Ctrl + A, Ctrl + C)');
  58. }
  59.  
  60. function loadConfig() {
  61. var test = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Config").getRange("B1:B").getValues()
  62. return test;
  63. }
  64.  
  65.  
  66. /* CR chart logic start */
  67.  
  68. function getData() {
  69.  
  70. var ss = SpreadsheetApp.getActiveSpreadsheet();
  71.  
  72. var ssData = ss.getDataRange().getValues();
  73.  
  74. var sortCriteria = ss.getSheetByName("Key").getRange("A2:A").getValues();
  75.  
  76. var rawData = [];
  77.  
  78. for (var i = 0; i < sortCriteria.length; i++) {
  79. var obj = {};
  80. obj.sortCriteria = sortCriteria[i][0];
  81. obj.data = [];
  82. rawData.push(obj);
  83. }
  84.  
  85. var threadData = ss.getSheetByName("Threads").getDataRange().getValues();
  86.  
  87. for (var i = 0; i < ssData.length; i++) {
  88. for (var j = 0; j < rawData.length; j++) {
  89. if (rawData[j].sortCriteria === ssData[i][SORT_INDEX]) {
  90. ssData[i].threads = [];
  91. // sort threads
  92. for (var t = 0; t < threadData.length; t++) {
  93. if (threadData[t][1] === ssData[i][NAME_INDEX]) {
  94. ssData[i].threads.push(threadData[t]);
  95. }
  96. }
  97. rawData[j].data.push(ssData[i]);
  98. break;
  99. }
  100. }
  101. }
  102.  
  103. return rawData;
  104. }
  105.  
  106.  
  107. /* Thread Tracker logic start */
  108. var monthNames = ["January", "February", "March", "April", "May", "June",
  109. "July", "August", "September", "October", "November", "December"
  110. ];
  111.  
  112. function getMonthYearFromDate(dateVal) {
  113. return monthNames[dateVal.getMonth()] + " " + dateVal.getYear();
  114. }
  115.  
  116. function getThreadURLChara(arr) {
  117. return "<a href='" + arr[TH_URL_INDEX] + "'>" + arr[TH_NAME_INDEX] + "</a>";
  118. }
  119.  
  120. function getValidDateObj(date) {
  121. if (date instanceof Date) {
  122. return date;
  123. }
  124. return new Date(date);
  125. }
  126.  
  127. function getThreadData() {
  128. var threadData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Threads").getDataRange().getValues();
  129. var rawData = [];
  130.  
  131. var isInData = false;
  132.  
  133. var tempMonthYear;
  134. var currentMonthIndex = -1;
  135.  
  136. for (var i = 1; i < threadData.length; i++) {
  137. var thDate = new Date(threadData[i][TH_DATE_INDEX]);
  138.  
  139. tempMonthYear = getMonthYearFromDate(thDate);
  140.  
  141. // check if already in rawData
  142. currentMonthIndex = -1;
  143. for (var j = 0; j < rawData.length; j++) {
  144. if (rawData[j].month === tempMonthYear) {
  145. currentMonthIndex = j;
  146. break;
  147. }
  148. }
  149.  
  150. // create if not existing
  151. if (currentMonthIndex == -1) {
  152. currentMonthIndex = rawData.length;
  153.  
  154. var tempMonthYearData = {};
  155. tempMonthYearData.month = tempMonthYear;
  156. tempMonthYearData.threads = [];
  157.  
  158. threadData[i][TH_DATE_INDEX] = Utilities.formatDate(getValidDateObj(threadData[i][TH_DATE_INDEX]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "d");
  159. threadData[i][TH_DESC_INDEX] = "<div>" + threadData[i][TH_DESC_INDEX] + "</div>";
  160.  
  161. threadData[i].push(1);
  162.  
  163. tempMonthYearData.threads.push(threadData[i]);
  164.  
  165. rawData.push(tempMonthYearData);
  166. } else {
  167. isInData = false;
  168. var currLength = rawData[currentMonthIndex].threads.length;
  169.  
  170. for (var j = 0; j < currLength; j++) {
  171. // already in the tracker, just add characters and append descriptions instead
  172. if (rawData[currentMonthIndex].threads[j][TH_TITLE_INDEX] === threadData[i][TH_TITLE_INDEX]) {
  173.  
  174. if (threadData[i][TH_DESC_INDEX] != "") {
  175. if (rawData[currentMonthIndex].threads[j][TH_CHARA_COUNT_INDEX] == 1 && rawData[currentMonthIndex].threads[j][TH_DESC_INDEX] != "") {
  176. rawData[currentMonthIndex].threads[j][TH_DESC_INDEX] = "<div><b>" + getThreadURLChara(rawData[currentMonthIndex].threads[j]) + "</b>: " + rawData[currentMonthIndex].threads[j][TH_DESC_INDEX].substr(5);
  177. Logger.log(rawData[currentMonthIndex].threads[j][TH_DESC_INDEX]);
  178. }
  179.  
  180. rawData[currentMonthIndex].threads[j][TH_DESC_INDEX] = rawData[currentMonthIndex].threads[j][TH_DESC_INDEX] + "<div>" + "<b>" + getThreadURLChara(threadData[i]) + "</b>: " + threadData[i][TH_DESC_INDEX] + "</div>";
  181. Logger.log(rawData[currentMonthIndex].threads[j][TH_DESC_INDEX]);
  182. }
  183.  
  184. if (rawData[currentMonthIndex].threads[j][TH_NAME_INDEX].indexOf(threadData[i][TH_NAME_INDEX]) == -1) {
  185. rawData[currentMonthIndex].threads[j][TH_NAME_INDEX] = rawData[currentMonthIndex].threads[j][TH_NAME_INDEX] + ", " + threadData[i][TH_NAME_INDEX];
  186. }
  187.  
  188. rawData[currentMonthIndex].threads[j][TH_CHARA_COUNT_INDEX]++;
  189. isInData = true;
  190. break;
  191. }
  192.  
  193. }
  194.  
  195. if (!isInData) {
  196. // add new entry
  197. threadData[i][TH_DATE_INDEX] = Utilities.formatDate(getValidDateObj(threadData[i][TH_DATE_INDEX]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "d");
  198. threadData[i][TH_DESC_INDEX] = "<div>" + threadData[i][TH_DESC_INDEX] + "</div>";
  199. threadData[i].push(1);
  200. rawData[currentMonthIndex].threads.push(threadData[i]);
  201. }
  202.  
  203. }
  204.  
  205. }
  206.  
  207. return rawData;
  208. }
Add Comment
Please, Sign In to add comment