Buongiorno a tutti. Questa la mia situazione:
Ho un modulo Google che trasmette ad un foglio i dati per richiedere le ferie i quali includono l'ora (nel caso in cui una persona voglia prendere solo 4 ore di permesso).
Dal foglio posso, tramite una funzione inviare una mail, accettando o rifiutando la richiesta.
Inviando la mail accettando la richiesta, viene inviata la mail all'utente con data e ora delle ferie (o permessi) richiesti come promemoria ma.....l'ora esce sempre sbagliata e all'orario indicato vengono aggiunti 81 minuti ovvero 1 ora e 21 minuti, e non riesco a capire dove si trovi l'errore. Tutto il resto è corretto e funziona. Viene anche aggiornato un calendario con le date e l'orario, ma quest'ultimo sempre con 1h e 21 minuti in più.
Esempio:
Chiedo ferie il giorno x dalle 08:30 alle 12:30
La mail inviata per conferma mi segna il giorno x corretto mentre l'orario è: dalle 9:51alle 13:51.
Il codice è il seguente:
N.B. Considerate che non sono un programmatore ed ho scopiazzato ed interpretato quello che altri hanno fatto, ho tagliato e cucito vari pezzi, quindi vi sarei grato se mi indicaste una soluzione alla mia portata. Grazie
Ho un modulo Google che trasmette ad un foglio i dati per richiedere le ferie i quali includono l'ora (nel caso in cui una persona voglia prendere solo 4 ore di permesso).
Dal foglio posso, tramite una funzione inviare una mail, accettando o rifiutando la richiesta.
Inviando la mail accettando la richiesta, viene inviata la mail all'utente con data e ora delle ferie (o permessi) richiesti come promemoria ma.....l'ora esce sempre sbagliata e all'orario indicato vengono aggiunti 81 minuti ovvero 1 ora e 21 minuti, e non riesco a capire dove si trovi l'errore. Tutto il resto è corretto e funziona. Viene anche aggiornato un calendario con le date e l'orario, ma quest'ultimo sempre con 1h e 21 minuti in più.
Esempio:
Chiedo ferie il giorno x dalle 08:30 alle 12:30
La mail inviata per conferma mi segna il giorno x corretto mentre l'orario è: dalle 9:51alle 13:51.
Il codice è il seguente:
Codice:
const CALENDAR_ID = "ID CALENDAR"; // Sostituisci con il tuo ID del calendario
const AUTORIZED = true;
const REJECTED = false;
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Verifica')
.addItem('Autorizza', 'authorize')
.addSeparator()
.addItem('Respingi', 'reject')
.addToUi();
}
function onSelectionChange(e) {
const range = e.range;
const sheet = range.getSheet();
const maxRows = sheet.getDataRange().getLastRow();
const maxColumns = sheet.getDataRange().getLastColumn();
// Salva la riga selezionata
PropertiesService.getScriptProperties().setProperty("selectedRow", range.getRow());
// Rimuove evidenziazione precedente
sheet.getRange(2, 1, maxRows - 1, maxColumns).setBackground(null);
// Evidenzia la riga selezionata
if (range.getRow() > 1 && range.getRow() <= maxRows) {
sheet.getRange(range.getRow(), 1, 1, maxColumns).setBackground("#FFcc00");
}
}
function authorize() {
try {
const request = getRequest();
if (request) {
sendMail(request, AUTORIZED);
addCalendarEvent(request.name, request.dateFrom, request.dateTo, request.timeFrom, request.timeTo);
const message = `
Data richiesta: ${request.requestDate || "Non disponibile"}
Email: ${request.email || "Non disponibile"}
Nome: ${request.name || "Non disponibile"}
Matricola: ${request.idNumber || "Non disponibile"}
Dal giorno: ${formatDate(request.dateFrom) || "Non disponibile"}
Al giorno: ${formatDate(request.dateTo) || "Non disponibile"}
Dalle ore: ${request.timeFrom || "Non disponibile"}
Alle ore: ${request.timeTo || "Non disponibile"}
`;
SpreadsheetApp.getUi().alert("Dati della Richiesta Autorizzata", message, SpreadsheetApp.getUi().ButtonSet.OK);
}
} catch (error) {
SpreadsheetApp.getUi().alert("Errore", `Si è verificato un errore: ${error.message}`, SpreadsheetApp.getUi().ButtonSet.OK);
}
}
function reject() {
try {
const request = getRequest();
if (request) {
sendMail(request, REJECTED);
}
} catch (error) {
SpreadsheetApp.getUi().alert("Errore", `Si è verificato un errore: ${error.message}`, SpreadsheetApp.getUi().ButtonSet.OK);
}
}
function getRequest() {
const sheet = SpreadsheetApp.getActiveSheet();
const maxColumns = sheet.getDataRange().getLastColumn();
const maxRows = sheet.getDataRange().getLastRow();
const row = parseInt(PropertiesService.getScriptProperties().getProperty("selectedRow"));
if (!row || row == 1 || row > maxRows) {
SpreadsheetApp.getUi().alert("Selezionare una richiesta valida!");
return null;
}
const sel = sheet.getRange(row, 1, 1, maxColumns);
const values = sel.getValues();
const request = {};
request.requestDate = values[0][0];
request.email = values[0][1];
request.name = values[0][2];
request.idNumber = values[0][3];
request.dateFrom = parseDate(values[0][4]);
request.dateTo = parseDate(values[0][5]);
request.timeFrom = parseTime(values[0][8]); // Colonna I
request.timeTo = parseTime(values[0][9]); // Colonna J
return request;
}
function parseDate(dateValue) {
if (dateValue instanceof Date) {
return dateValue;
} else {
throw new Error("Formato data non valido: " + dateValue);
}
}
function parseTime(timeValue) {
if (timeValue instanceof Date) {
const hours = timeValue.getHours().toString().padStart(2, "0");
const minutes = timeValue.getMinutes().toString().padStart(2, "0");
return `${hours}:${minutes}`;
} else if (typeof timeValue === "string") {
const parts = timeValue.split(":");
if (parts.length === 2) {
const hours = parseInt(parts[0], 10).toString().padStart(2, "0");
const minutes = parseInt(parts[1], 10).toString().padStart(2, "0");
return `${hours}:${minutes}`;
}
}
throw new Error("Formato orario non valido: " + timeValue);
}
function addCalendarEvent(title, startDate, endDate, startTime, endTime) {
const startDateTime = new Date(startDate);
const [startHours, startMinutes] = startTime.split(":").map(Number);
startDateTime.setHours(startHours, startMinutes, 0, 0);
const endDateTime = new Date(endDate);
const [endHours, endMinutes] = endTime.split(":").map(Number);
endDateTime.setHours(endHours, endMinutes, 0, 0);
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
if (!calendar) {
throw new Error("Calendario non trovato: " + CALENDAR_ID);
}
calendar.createEvent(title, startDateTime, endDateTime);
}
function formatDate(date) {
return Utilities.formatDate(date, Session.getScriptTimeZone(), "dd/MM/yyyy");
}
function sendMail(request, result) {
let subject = null;
let body = "Buongiorno " + request.name + " (matricola: " + request.idNumber + "),\n";
body += "La tua richiesta di ferie per il periodo " + formatDate(request.dateFrom) + " - " + formatDate(request.dateTo) + "\n";
body += "Dalle ore " + request.timeFrom + " alle ore " + request.timeTo + "\n";
if (result) {
subject = "Richiesta di ferie accettata";
body += "è stata approvata.";
} else {
subject = "Richiesta di ferie respinta";
body += "è stata respinta. Per delucidazioni contattare la sede. Grazie.";
}
MailApp.sendEmail(request.email, subject, body);
}
N.B. Considerate che non sono un programmatore ed ho scopiazzato ed interpretato quello che altri hanno fatto, ho tagliato e cucito vari pezzi, quindi vi sarei grato se mi indicaste una soluzione alla mia portata. Grazie