Untitled

 avatar
unknown
plain_text
20 days ago
3.0 kB
1
Indexable
function recommendTeachers() {
  const profilingSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Teacher Profiling");
  const statsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Teacher Moodle Stats");

  // Read course names (current and future courses)
  const courseInputRange = profilingSheet.getRange("C6:C9").getValues().flat().filter(course => course);

  if (courseInputRange.length === 0) {
    Logger.log("No courses provided for recommendation.");
    return;
  }

  // Read headers and teacher data from Teacher Moodle Stats
  const headers = statsSheet.getRange("E2:BB2").getValues()[0];
  const teacherData = statsSheet.getRange(3, 1, statsSheet.getLastRow() - 2, statsSheet.getLastColumn()).getValues();

  // Create a dictionary to store recommendations for each teacher
  let teacherRecommendations = {};

  // Iterate over each course
  courseInputRange.forEach((course, courseIndex) => {
    const courseHeaderIndex = headers.indexOf(course); // Find the column index for the course

    if (courseHeaderIndex === -1) {
      Logger.log(`Course "${course}" not found in Teacher Moodle Stats headers.`);
      return;
    }

    // Column to search is offset by E2
    const columnIndex = courseHeaderIndex + 4;

    // Check each teacher for compliance
    teacherData.forEach(row => {
      const teacherName = row[0];
      const percentage = row[columnIndex];

      if (percentage && !percentage.includes("Not onboarded")) {
        // Parse percentage (e.g., "51-60%" -> numeric range)
        const match = percentage.match(/^(\d+)-(\d+)%|^(\d+)%$/);
        if (match) {
          const lowerBound = parseInt(match[1] || match[3], 10);

          if (lowerBound >= 50) {
            // Initialize teacher record if not already present
            if (!teacherRecommendations[teacherName]) {
              teacherRecommendations[teacherName] = Array(courseInputRange.length).fill("-");
            }

            // Update the percentage for this course
            teacherRecommendations[teacherName][courseIndex] = percentage;
          }
        }
      }
    });
  });

  // Prepare data for writing to the sheet
  const outputData = Object.entries(teacherRecommendations).map(([teacherName, percentages]) => {
    return [teacherName, ...percentages];
  });

  // Write the header row
  const headerRow = ["Recommend Teacher", ...courseInputRange.map((course, index) => `Future Course ${index + 1} %`)];
  profilingSheet.getRange("C13").setValue("Recommend Teacher"); // Set the first column header
  profilingSheet.getRange(13, 4, 1, courseInputRange.length).setValues([headerRow.slice(1)]); // Set future course headers

  // Write teacher recommendations starting from C14
  profilingSheet.getRange(14, 3, outputData.length, outputData[0].length).setValues(outputData);

  Logger.log("Recommendations have been updated.");
}
Leave a Comment