SKRIPT
Propojení osobního dotazníku s databází

function onOpen() {

  var ui = SpreadsheetApp.getUi();

  // Přidání vlastního menu s názvem "OVLÁDÁNÍ"

  ui.createMenu('OVLÁDÁNÍ')

      .addItem('Kopírovat data do DTB', 'main') // Přidání položky "Kopírovat data do DTB", která spustí funkci 'main'

      .addItem('Odeslat oznámení o novém zaměstnanci', 'sendEmails1') // Přidání položky, která spustí funkci 'sendEmails1'

      .addToUi();

}


function main() {

  var ui = SpreadsheetApp.getUi();

 

  // Zobrazení úvodního hlášení s instrukcemi

  var response = ui.alert('UPOZORNĚNÍ',

    `Pro kopírování dat do listu DTB postupujte následovně:

    Přepněte se do listu, který je propojený s formulářem a označte řádek, který chcete přenést do listu DTB

    (můžete buď označit celý řádek anebo jenom kliknout na některou buňku v daném řádku).

    Jste přepnuti v tomto listu a označili jste správný řádek?`,

    ui.ButtonSet.YES_NO);


  // Kontrola odpovědi uživatele

  if (response == ui.Button.NO) {

    ui.alert('Upozornění', 'Nejprve označte správný řádek a spusťte skript znovu.', ui.ButtonSet.OK);

    return;

  }


  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var parametrySheet = ss.getSheetByName('parametry');


  // Načtení názvu listu z buňky B1 v listu 'parametry'

  var targetSheetName = parametrySheet.getRange('B1').getValue();

  var targetSheet = ss.getSheetByName(targetSheetName);


  // Uložení aktivní buňky a listu

  var originalSheet = ss.getActiveSheet();

  var activeRange = originalSheet.getActiveRange();

  var activeRow = activeRange.getRow();

  var activeColumn = activeRange.getColumn();


  // Přepnutí na cílový list a zobrazení listu uživateli

  ss.setActiveSheet(targetSheet);

  SpreadsheetApp.flush(); // Ujistí se, že změny se projeví uživateli


  // Načtení hodnot z uloženého řádku v rozsahu sloupců C až AA

  var values = targetSheet.getRange(activeRow, 3, 1, 27).getValues()[0];


  // Přepnutí do listu 'DTB' a zobrazení listu uživateli

  var dtbSheet = ss.getSheetByName('DTB');

  ss.setActiveSheet(dtbSheet);

  SpreadsheetApp.flush(); // Ujistí se, že změny se projeví uživateli


  var lastRow = dtbSheet.getLastRow();

  var freeRow = findFirstFreeRow(dtbSheet, 4, lastRow);


  // Vložení zkopírovaných hodnot do prvního volného řádku počínaje sloupcem E

  dtbSheet.getRange(freeRow, 5, 1, 27).setValues([values]);


  // Vyhledání maximální hodnoty ve sloupci D a vytvoření nového ID

  var maxD = findMaxInColumn(dtbSheet, 4); // Sloupec D

  var newID;

  if (maxD) {

    newID = maxD + 1;

  } else {

    var year = new Date().getFullYear().toString().slice(-2);

    newID = parseInt(year + '01');

  }

  dtbSheet.getRange(freeRow, 4).setValue(newID);


  // Vložení nezaškrtnutého zaškrtávacího políčka do sloupce A

  var checkBoxCell = dtbSheet.getRange(freeRow, 1);

  checkBoxCell.insertCheckboxes();


  // Vytvoření a vložení textového řetězce do sloupce AU

  var textF = dtbSheet.getRange(freeRow, 6).getValue(); // Hodnota ze sloupce F

  var textG = dtbSheet.getRange(freeRow, 7).getValue(); // Hodnota ze sloupce G

  var textAU = removeDiacritics(textF.substring(0, 2)) + removeDiacritics(textG.charAt(0));

  dtbSheet.getRange(freeRow, 47).setValue(textAU);


  // Zobrazení závěrečného hlášení

  ui.alert('Data byla vložena, doplňte další potřebné údaje k danému zaměstnanci.');

}


// Funkce pro vyhledání prvního volného řádku počínaje zadaným řádkem

function findFirstFreeRow(sheet, startRow, lastRow) {

  for (var row = startRow; row <= lastRow; row++) {

    var range = sheet.getRange(row, 5, 1, 6); // Sloupce E-K

    var values = range.getValues()[0];

    var isEmpty = values.every(function(value) {

      return value === "";

    });

    if (isEmpty) {

      return row;

    }

  }

  return lastRow + 1; // Pokud nenašlo, vrátí další řádek

}


// Funkce pro vyhledání maximální hodnoty v daném sloupci

function findMaxInColumn(sheet, column) {

  var data = sheet.getRange(4, column, sheet.getLastRow() - 3, 1).getValues();

  var max = 0;

  for (var i = 0; i < data.length; i++) {

    if (data[i][0] > max) {

      max = data[i][0];

    }

  }

  return max;

}


// Funkce pro odstranění diakritiky z textu

function removeDiacritics(str) {

  var diacriticsMap = {

    'á': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'ě': 'e', 'í': 'i', 'ň': 'n', 'ó': 'o', 'ř': 'r', 'š': 's', 'ť': 't', 'ú': 'u', 'ů': 'u', 'ý': 'y', 'ž': 'z',

    'Á': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Ě': 'E', 'Í': 'I', 'Ň': 'N', 'Ó': 'O', 'Ř': 'R', 'Š': 'S', 'Ť': 'T', 'Ú': 'U', 'Ů': 'U', 'Ý': 'Y', 'Ž': 'Z'

  };

  return str.replace(/[^\u0000-\u007E]/g, function(a) {

    return diacriticsMap[a] || a;

  });

}