Скрипт для добавления задач в контрольный список на соответствующую дату - PullRequest
0 голосов
/ 12 января 2019

У меня есть скрипт, который будет принимать список задач, проверять частоту проверки (ежедневно, еженедельно, раз в два года, смена часов (летнее время)) и заполнять журнал этими проверками, если проверка должна быть завершена .

В настоящее время это работает для ежедневных и еженедельных задач, потому что это просто сравнение двух дат и добавление 1,7, но мне нужно иметь возможность добавить чек, который добавляется в журнал непосредственно перед тем, как произойдут изменения часов, чтобы соответствующие Команда может завершить проверку.

Я считаю, что главная проблема в том, что я просто сравниваю разницу в датах.

Вот мой текущий код ... если это не имеет смысла, пожалуйста, спросите!

function fillTasksLog(){

var ss = SpreadsheetApp.getActiveSpreadsheet();

var Settingss = ss.getSheetByName('Settings')
var teamList = Settingss.getRange("A2:C").getValues();

for(var team in teamList){
  if(teamList[team][0] != ""){
    var WMsheet = ss.getSheetByName(teamList[team][0])
    var WMSheetLog = ss.getSheetByName('Log')
    var taskList = WMsheet.getRange("A4:I").getValues();
    var taskLog = WMSheetLog.getRange("A4:Q").getValues();

    var nextFreeRow = WMSheetLog.getLastRow()+1
    var count = 0;
      for (var task in taskList){
        var latestDate = new Date("2017-01-21T20:23:26+0000"); 
        var existingTaskFound = false;
        for(var loggedTask in taskLog){
           var uniqueLogID = taskLog[loggedTask][13];
           var uniqueTaskListID = taskList[task][8];
           var uniqueLogDate = taskLog[loggedTask][9];
           var checkFrequencyDays = 0;

           switch(taskList[task][0]){// looks for date type (frequency)of item in log and assigns value
           //ADD WEEKDAYS TO SWITCH
                case "Daily" :
                  //Logger.log("INSIDE SWITCH DAILY: ");
                  checkFrequencyDays=1;
                break;
                case "Weekly" :
                  //Logger.log("INSIDE SWITCH WEEKLY: ");
                  checkFrequencyDays=7;
                break;
                case "Monthly" :
                  //Logger.log("INSIDE SWITCH Monthly: ");
                  checkFrequencyDays=30.5;
                break;
                case "Quarterly" :
                  //Logger.log("INSIDE SWITCH QUARTERLY: ");
                  checkFrequencyDays=91.25;
                break;
                case "Bi-annually" :
                  //Logger.log("INSIDE SWITCH BI-ANNUALLY: ");
                  checkFrequencyDays=182.5;
                break;
                case "Annually" :
                  //Logger.log("INSIDE SWITCH ANNUALLY: ");
                  checkFrequencyDays=365;
                break;
                default :
                  //Logger.log("INSIDE SWITCH DEFAULT: ");
                  checkFrequencyDays=1;
                break;
              }
             if(uniqueLogID == uniqueTaskListID){
                existingTaskFound = true;
                //Logger.log("checkFrequencyDays: "+checkFrequencyDays);
                //Logger.log("LATEST"+latestDate);
                //Logger.log(taskLog[loggedTask][16]);

                if(latestDate < taskLog[loggedTask][14]){
                  latestDate = taskLog[loggedTask][14];
                  if(taskLog[loggedTask][10] == ""){
                    WMSheetLog.getRange('K' + (parseInt(loggedTask) + 4)).setValue("No");
                  }
                }
             }
        }
        if(existingTaskFound){
          var dt1 = new Date(); // today's date
          var dt2 = latestDate;

          // get milliseconds
          var t1 = dt1.getTime();
          var t2 = dt2.getTime();

          var diffInDays = Math.floor((t1-t2)/(24*3600*1000));
          // 24*3600*1000 is milliseconds in a day
          //Logger.log("DIFFINDAYS: "+diffInDays);
          if(diffInDays >= checkFrequencyDays){
            addTaskToLog(WMSheetLog, nextFreeRow, count,taskList, task, teamList[team][0], teamList[team][1]);
            count ++;
          }
        }else{
          addTaskToLog(WMSheetLog, nextFreeRow, count,taskList, task, teamList[team][0], teamList[team][1]);
          count ++;
        }

      }
    }
  }
}

function addTaskToLog(WMSheetLog, nextFreeRow, count,taskList, task, teamName, teamType){
  var todaysDate = new Date();
  WMSheetLog.getRange('A' + (nextFreeRow + count)).setValue(taskList[task][0]);
  WMSheetLog.getRange('B' + (nextFreeRow + count)).setValue(taskList[task][1]);
  WMSheetLog.getRange('C' + (nextFreeRow + count)).setValue(taskList[task][2]);
  WMSheetLog.getRange('D' + (nextFreeRow + count)).setValue(taskList[task][3]);
  WMSheetLog.getRange('E' + (nextFreeRow + count)).setValue(taskList[task][4]);
  WMSheetLog.getRange('F' + (nextFreeRow + count)).setValue(taskList[task][5]);
  WMSheetLog.getRange('G' + (nextFreeRow + count)).setValue(taskList[task][6]);
  WMSheetLog.getRange('H' + (nextFreeRow + count)).setValue(taskList[task][7]);
  WMSheetLog.getRange('N' + (nextFreeRow + count)).setValue(taskList[task][8]);
  WMSheetLog.getRange('O' + (nextFreeRow + count)).setValue(todaysDate);
  WMSheetLog.getRange('P' + (nextFreeRow + count)).setValue(teamName);
  WMSheetLog.getRange('Q' + (nextFreeRow + count)).setValue(teamType);
}

Обновлен вопрос 13 января:

Ожидаемым результатом будет то, что если у кого-то есть задача, которую необходимо выполнить до смены часов (возможно, даже за две недели до этого), задача будет добавлена ​​в журнал на соответствующую дату. например, в этом году часы меняются в воскресенье, 31 марта ... Я бы хотел, чтобы это задание было добавлено в журнал за две недели до этого, чтобы команда знала, что им нужно выполнить задание. На данный момент сценарий не знает даты смены часов и просто ссылается на простой расчет, т. Е. Каждые 6 месяцев равны 182,5 дням

Это то же самое с двухлетними заданиями

Обновление изображений 14 января:

Страница для команды, чтобы обновить их список задач (Лист с названием команды)

Страница настроек с информацией о команде

Основной журнал, заполняемый списком задач каждой команды

Еще одна функция, которая мне нужна, - это если нужно выполнить проверку в определенный день в период, когда сценарий может это понять.

...