Gérer le droit à la déconnexion avec un script Google Apps

4 mn de lecture

Dans le monde numérique actuel, il est facile de perdre la frontière entre vie professionnelle et vie personnelle. Le droit à la déconnexion protège les employés en leur permettant d’éviter toute sollicitation en dehors des heures de travail. Pourtant, appliquer ce droit peut poser problème, notamment avec les emails professionnels. Heureusement, l’automatisation offre une solution efficace.

Avec un script Google Apps, vous pouvez gérer l’envoi d’emails pour respecter les horaires de travail. Ce script contrôle les jours ouvrés et les plages horaires afin de garantir que les emails sont envoyés au bon moment. Si ces conditions ne sont pas réunies, le processus d’envoi est interrompu.

Pourquoi automatiser le droit à la déconnexion ?

Automatiser cette tâche présente de nombreux avantages. D’abord, vous vous assurez de respecter la législation sur la déconnexion. De plus, vous garantissez que vos collaborateurs ou clients ne reçoivent pas d’emails en dehors des heures de travail. Ainsi, vous favorisez un environnement de travail plus sain et plus respectueux de la vie privée.

Comment fonctionne le script ?

Ce script analyse trois critères pour décider si un email peut être envoyé :

  1. Jour de la semaine : Le script vérifie si le jour est un jour ouvré (du lundi au vendredi). Si c’est un samedi ou un dimanche, il bloque l’envoi.
  2. Jour férié : Il compare la date actuelle à la liste des jours fériés en France. Si la date correspond à un jour férié, il bloque également l’envoi.
  3. Plage horaire : Enfin, le script vérifie que l’envoi se fait entre 7h30 et 18h30. En dehors de cette plage horaire, l’envoi est empêché.

Le code

Voici le code qui effectue ces vérifications :

function estJourOuvreEtHeureValide() {
  // Obtenir la date et l'heure actuelle au fuseau horaire de Paris
  const now = new Date();
  const parisTime = Utilities.formatDate(now, "Europe/Paris", "HH:mm");

  // Extraire l'heure et les minutes
  const [heure, minutes] = parisTime.split(':').map(Number);

  // 1. Vérification si c'est un jour ouvré (lundi à vendredi)
  const jour = Utilities.formatDate(now, "Europe/Paris", "u"); // "u" retourne 1 pour lundi et 7 pour dimanche
  if (jour === '6' || jour === '7') {
    // Si c'est un samedi (6) ou un dimanche (7), retour faux
    return false;
  }

  // 2. Vérification si c'est un jour férié en France
  const joursFeries = getJoursFeries(now.getFullYear());

  // Formater la date actuelle au format jour/mois
  const jourActuel = Utilities.formatDate(now, "Europe/Paris", "dd/MM");

  if (joursFeries.includes(jourActuel)) {
    // Si c'est un jour férié, retour faux
    return false;
  }

  // 3. Vérification si l'heure à Paris est entre 7h30 et 18h30
  if ((heure < 7 || (heure === 7 && minutes < 30)) || (heure > 18 || (heure === 18 && minutes > 30))) {
    // Si l'heure n'est pas entre 7h30 et 18h30, retour faux
    return false;
  }

  // Si toutes les conditions sont remplies, retour vrai
  return true;
}

// Fonction pour calculer les jours fériés en France pour une année donnée
function getJoursFeries(annee) {
  // Calcul de Pâques
  const paques = getDatePaques(annee);
  const lundiPaques = new Date(paques);
  lundiPaques.setDate(paques.getDate() + 1); // Lundi de Pâques
  const ascension = new Date(paques);
  ascension.setDate(paques.getDate() + 39); // Ascension, 39 jours après Pâques
  const pentecote = new Date(paques);
  pentecote.setDate(paques.getDate() + 50); // Lundi de Pentecôte, 50 jours après Pâques

  // Liste des jours fériés fixes et variables
  const joursFeries = [
    '01/01',  // Jour de l'An
    '01/05',  // Fête du Travail
    '08/05',  // Victoire 1945
    '14/07',  // Fête Nationale
    '15/08',  // Assomption
    '01/11',  // Toussaint
    '11/11',  // Armistice
    '25/12',  // Noël
    formatDate(lundiPaques), // Lundi de Pâques
    formatDate(ascension),   // Ascension
    formatDate(pentecote)    // Lundi de Pentecôte
  ];

  return joursFeries;
}

// Fonction pour calculer la date de Pâques pour une année donnée (algorithme de Gauss)
function getDatePaques(annee) {
  const a = annee % 19;
  const b = Math.floor(annee / 100);
  const c = annee % 100;
  const d = Math.floor(b / 4);
  const e = b % 4;
  const f = Math.floor((b + 8) / 25);
  const g = Math.floor((b - f + 1) / 3);
  const h = (19 * a + b - d - g + 15) % 30;
  const i = Math.floor(c / 4);
  const k = c % 4;
  const l = (32 + 2 * e + 2 * i - h - k) % 7;
  const m = Math.floor((a + 11 * h + 22 * l) / 451);
  const month = Math.floor((h + l - 7 * m + 114) / 31);
  const day = ((h + l - 7 * m + 114) % 31) + 1;
  return new Date(annee, month - 1, day);
}

// Fonction utilitaire pour formater une date en 'jj/mm'
function formatDate(date) {
  const jour = ('0' + date.getDate()).slice(-2);
  const mois = ('0' + (date.getMonth() + 1)).slice(-2);
  return `${jour}/${mois}`;
}

Intégration dans le processus d’envoi d’emails

Ce script s’intègre facilement à votre processus d’envoi d’emails. Voici un exemple d’utilisation dans une situation réelle :

function envoyerEmailSiConditionsRespectees() {
  if (estJourOuvreEtHeureValide()) {
    MailApp.sendEmail('destinataire@example.com', 'Objet', 'Contenu de l’email');
  } else {
    Logger.log('Email non envoyé : en dehors des jours ouvrés ou des horaires.');
  }
}

Lorsque la fonction estJourOuvreEtHeureValide renvoie false, le script empêche l’envoi de l’email. Ainsi, vous appliquez le droit à la déconnexion sans effort supplémentaire.

Grâce à ce script, vous pouvez facilement gérer les horaires d’envoi d’emails et assurer le respect du droit à la déconnexion. Non seulement cela vous aide à respecter la législation, mais cela améliore également l’équilibre entre vie professionnelle et personnelle pour tous. En intégrant ce script dans vos processus, vous optimisez la gestion des communications tout en favorisant le bien-être des collaborateurs.


Si cet article vous a été utile et que vous souhaitez soutenir mon travail, vous pouvez me remercier en faisant un don via PayPal. Chaque contribution est grandement appréciée et m’aide à continuer à partager des astuces et conseils sur ce blog. Merci pour votre soutien !