Created
December 21, 2018 13:12
-
-
Save phillypb/6875efbbecaad18eb286eb7b20e1f742 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function onFormSubmit(e) { | |
| // ******************************* get sheet data ****************************** | |
| var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
| var formResponse = ss.getSheetByName('Form Responses 3'); | |
| var numCols = formResponse.getLastColumn(); | |
| var configArray = ss.getSheetByName('config').getDataRange().getValues(); | |
| Logger.log(configArray); | |
| // *************************** end of get sheet data *************************** | |
| // ******************************* get documents ******************************* | |
| // get 'Request TEMPLATE' doc | |
| var docID = configArray[2][1]; | |
| Logger.log('DocID: ' + docID); | |
| var templateDoc = DriveApp.getFileById(docID); | |
| // get destination folder | |
| var folderID = configArray[3][1]; | |
| Logger.log('FolderID: ' + folderID); | |
| var destinationFolder = DriveApp.getFolderById(folderID); | |
| // create style based on 'Heading 1' for headings in Doc | |
| var style = {}; | |
| style[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING1; | |
| // *************************** end of get documents **************************** | |
| // ******************************* get main form data ****************************** | |
| var formData = e.values; // get row data as array | |
| var theRow = e.range.getRow(); // this is the row the Form data is written to | |
| Logger.log(formData); | |
| // get specific form fields | |
| var emailAddress = formData[1]; | |
| Logger.log(emailAddress); | |
| var forename = formData[2]; | |
| Logger.log(forename); | |
| var surname = formData[3]; | |
| Logger.log(surname); | |
| var fullName = forename + ' ' + surname; | |
| Logger.log(fullName); | |
| var studentNumber = formData[4]; | |
| Logger.log(studentNumber); | |
| var outline = formData[5]; | |
| Logger.log(outline); | |
| var evidence = formData[6]; | |
| Logger.log(evidence); | |
| var individEvidence = evidence.split(', '); // split up evidence URLs from single string | |
| // *************************** end of get main form data *************************** | |
| // ***************************** collate uploaded files **************************** | |
| var evidenceFolderID = configArray[5][1]; | |
| var evidenceNewFolder = DriveApp.getFolderById(evidenceFolderID).createFolder(fullName); | |
| var createdFolderID = evidenceNewFolder.getId(); | |
| Logger.log('Newly created folder ID is: ' + createdFolderID); | |
| for (var h=0; h<individEvidence.length; h++) { | |
| var split = individEvidence[h].split('='); // split URL to get just ID | |
| var uploadID = split[1]; // URL is second part of split | |
| Logger.log('Upload file ID is: ' + uploadID); | |
| var file = DriveApp.getFileById(uploadID); | |
| Logger.log('File is: ' + file); | |
| // get locations of where file currently exists | |
| var parents = file.getParents(); | |
| // add file to new folder location (so is ignored from previously collated 'parents' and hence won't be removed from here) | |
| DriveApp.getFolderById(createdFolderID).addFile(file); | |
| // once file has moved, remove it from any other locations so only 1 copy left | |
| while (parents.hasNext()) { | |
| var parent = parents.next(); | |
| parent.removeFile(file); | |
| } | |
| } | |
| // ********************* end of collate uploaded files **************************** | |
| // ******************************* edit document ******************************* | |
| // copy template doc with student name | |
| var newDocURL = templateDoc.makeCopy(fullName, destinationFolder).getUrl(); | |
| Logger.log('newDocURL: ' + newDocURL); | |
| var newDoc = DocumentApp.openByUrl(newDocURL); // get newly created doc | |
| var docBody = newDoc.getBody(); // get doc body | |
| // edit doc tags | |
| docBody.replaceText('<<Name>>', fullName); | |
| docBody.replaceText('<<studentNo>>', studentNumber); | |
| docBody.replaceText('<<email>>', emailAddress); | |
| docBody.replaceText('<<description>>', outline); | |
| // loop through each piece of evidence and append to table ****************** | |
| var allTables = docBody.getTables(); // get all tables in doc | |
| var evidenceTable = allTables[1]; // get evidence table | |
| var tc = evidenceTable.getCell(0, 0); // get current cell | |
| // append paragraph for each evidence link and make clickable in doc | |
| for (var i=0; i<individEvidence.length; i++) { | |
| tc.appendParagraph(individEvidence[i]).setLinkUrl(individEvidence[i]); | |
| }// end of loop through each piece of evidence and append to table *********** | |
| tc.getChild(0).removeFromParent(); // remove first empty paragraph from table cell created by previous 'appendParagraph' | |
| // loop through module info and append to doc ******************************** | |
| for (var j=7; j<numCols; j=j+5) { | |
| if (formData[j] != '') { | |
| var moduleTitle = formData[j]; | |
| var moduleCode = formData[j+1]; | |
| var deadline = formData[j+2]; | |
| var extension = formData[j+3]; | |
| docBody.appendParagraph('*******************************************************'); | |
| docBody.appendParagraph(''); | |
| docBody.appendParagraph('Module title: ' + moduleTitle); | |
| docBody.appendParagraph('Module code: ' + moduleCode); | |
| docBody.appendParagraph('Deadline: ' + deadline); | |
| docBody.appendParagraph('Extension: ' + extension); | |
| docBody.appendParagraph(''); | |
| } | |
| }// end of loop through module info and append to doc ************************ | |
| docBody.appendParagraph('*******************************************************'); | |
| docBody.appendParagraph('Commentary').setAttributes(style); // create 'Commentary' heading | |
| // loop through creating user comment table ********************************** | |
| var numComments = configArray[4][1]; // grabs value from 'config' allowing user to adjust in future | |
| Logger.log(numComments); | |
| for (var k=0; k<numComments; k++) { | |
| var commentTable = docBody.appendTable([['Name']]); // create new table for user comments with first row of text | |
| commentTable.getCell(0, 0).appendParagraph('Date'); | |
| commentTable.getCell(0, 0).appendParagraph('Comments'); | |
| commentTable.getCell(0, 0).appendParagraph('Recommendation'); | |
| }// end of loop through creating user comment table *************************** | |
| docBody.appendParagraph('Final Decision').setAttributes(style); // create 'Final Decision' heading | |
| var decisionTable = docBody.appendTable([['Name']]); // create new table for user comments with first row of text | |
| decisionTable.getCell(0, 0).appendParagraph('Date'); | |
| decisionTable.getCell(0, 0).appendParagraph('Comments'); | |
| decisionTable.getCell(0, 0).appendParagraph('Decision'); | |
| // ************************** end of edit documents **************************** | |
| // set 'URL' column with link to newly created doc | |
| formResponse.getRange(theRow, numCols).setFormula('=HYPERLINK("' + newDocURL + '","' + fullName + '")'); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment