save mails directly from google form based on selection and file download

PHOTO EMBED

Wed May 08 2024 06:58:18 GMT+0000 (Coordinated Universal Time)

Saved by @ash1i

// Replace 'YOUR_FORM_ID' with the ID of your Google Form
var form = FormApp.openById('1anUG2PmvXTIec9QycnZXEWFhDW8sAeDBgnQu9mefdo4');

// Load submission counter from Script Properties
var scriptProperties = PropertiesService.getScriptProperties();
var submissionCounter = parseInt(scriptProperties.getProperty('submissionCounter')) || 0;

// Load processed submissions from User Properties
var userProperties = PropertiesService.getUserProperties();
var processedSubmissions = userProperties.getProperty('processedSubmissions');
processedSubmissions = processedSubmissions ? JSON.parse(processedSubmissions) : {};

function onFormSubmit(e) {
  // Lock the script to prevent concurrent execution
  var lock = LockService.getScriptLock();
  lock.waitLock(30000); // wait for 30 seconds

  try {
    var response = e.response;
    var submissionId = response.getId();
    
    // Check if this submission has already been processed
    if (processedSubmissions[submissionId]) {
      return;
    }

    var itemResponses = response.getItemResponses();
    var recipientEmail = '';
    var ccEmails = []; // Array to store CC email addresses for each location
    var generateSerialNumber = true; // Default to true, assuming serial number should be generated
    var attachments = []; // Array to store attachments
    var downloadLinks = ''; // String to store download links for the email body
    
    // Check the response for the specific question that determines whether to generate a serial number or not
    for (var i = 0; i < itemResponses.length; i++) {
      var itemResponse = itemResponses[i];
      if (itemResponse.getItem().getTitle() === 'FORM SUBMISSION TYPE') { // Adjust this to the title of the question that determines HR type
        if (itemResponse.getResponse() === 'CORPORATE HR') {
          generateSerialNumber = false; // If Corporate HR is selected, do not generate serial number
        }
      }
    }
    
    // Incrementing the submission counter if needed
    if (generateSerialNumber) {
      submissionCounter++;
    }
    
    // Extracting the form data and formatting as HTML table
    var formData = '<table border="1">';
    
    // Adding serial number to the table if needed
    if (generateSerialNumber) {
      formData += '<tr><td><strong>Serial Number</strong></td><td>' + submissionCounter + '</td></tr>';
    }
    
    for (var i = 0; i < itemResponses.length; i++) {
      var itemResponse = itemResponses[i];
      formData += '<tr><td><strong>' + itemResponse.getItem().getTitle() + '</strong></td><td>' + itemResponse.getResponse() + '</td></tr>';
      if (itemResponse.getItem().getTitle() === 'EMAIL OF THE EMPLOYEE') { // Change 'Email Address' to the title of your email question
        recipientEmail = itemResponse.getResponse();
      }
      // Check if the question is the location question
      if (itemResponse.getItem().getTitle() === 'SELECT UNIT') { // Adjust this to the title of your location question
        var selectedLocations = itemResponse.getResponse().split(', ');
        // Loop through selected locations
        for (var j = 0; j < selectedLocations.length; j++) {
          var location = selectedLocations[j];
          // Add email addresses to the ccEmails array based on the selected location
          switch (location) {
            case 'Binola-1,2':
              ccEmails.push('niranjan.yadav@meenakshipolymers.com', 'hr.binola@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Corporate 2,3,4':
              ccEmails.push('ashwani.kumar1@meenakshipolymers.com','neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Dadri':
              ccEmails.push('hr.dadri@meenakshipolymers.com', 'mayank.sharma@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Haridwar I':
              ccEmails.push('prashant.gupta@meenakshipolymers.com', 'sachin.kumar@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Haridwar II':
              ccEmails.push('arun.kumar2@meenakshipolymers.com', 'praveen.sharma@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Kadi':
              ccEmails.push('aditi.singh@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Gurgaon':
              ccEmails.push('kuldeep.yadav@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;  
            case 'Manesar':
              ccEmails.push('manoj.khosya@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;
            case 'Neemrana':
              ccEmails.push('sandeep.kumar@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com');
              break;          
            default:
              break;
          }
        }
      }
      // Check if the question has file uploads
if (itemResponse.getItem().getType() === FormApp.ItemType.FILE_UPLOAD) {
  var fileResponses = itemResponse.getResponse();
  for (var k = 0; k < fileResponses.length; k++) {
    var fileId = fileResponses[k]; // Retrieve each file ID
    if (!attachments.includes(fileId)) { // Check if the file is not already attached
      var file = DriveApp.getFileById(fileId);
      attachments.push(file.getBlob());
      downloadLinks += '<a href="cid:' + file.getId() + '">' + file.getName() + '</a><br>';
    }
  }
}


    }
    formData += '</table>';
    
    if (recipientEmail !== '') {
      // Formatting the email content in HTML
      var htmlBody = '<html><body>';
      htmlBody += '<h1>Request for New Ticket/Hotel Booking, See Details Below</h1>';
      htmlBody += formData;
      if (downloadLinks !== '') {
        htmlBody += '<h2>Uploaded Files:</h2>' + downloadLinks;
      }
      htmlBody += '</body></html>';
      
      // Subject with serial number if generated
      var subject = generateSerialNumber ? 'Request for New Ticket/Hotel Booking - Serial Number: ' + submissionCounter : 'Request Update for Hotel/Train/Flight Booking';
      
      // Sending the email
      MailApp.sendEmail({
        to: recipientEmail,
        cc: ccEmails.join(','),
        subject: subject,
        htmlBody: htmlBody,
        attachments: attachments
      });
    }
    
    // Store updated submissionCounter in Script Properties if needed
    if (generateSerialNumber) {
      scriptProperties.setProperty('submissionCounter', submissionCounter);
    }
    
    // Record this submission as processed
    processedSubmissions[submissionId] = true;
    userProperties.setProperty('processedSubmissions', JSON.stringify(processedSubmissions));
  } finally {
    // Release the lock
    lock.releaseLock();
  }
}

// Install a trigger to run on form submission
function installTrigger() {
  ScriptApp.newTrigger('onFormSubmit')
      .forForm(form)
      .onFormSubmit()
      .create();
}
content_copyCOPY