Remplir un agenda google via un google form pour prise de rdv en ligne - Javascript/Node.js - Programmation
Marsh Posté le 12-09-2014 à 18:58:59
J'ai l'impression que cela marche comme cela : (le E signifie Étape)
Client fait sa réservation sur Google-Drive via le formulaire (E1) => Google Drive via le script le pousse dans ton calendrier (E2) => Affichage dans ton calendrier "pro" (E3).
Le code que tu as mis concerne l'étape E2 qui est caché au client et "testeur". De plus l'exemple donné est "simple" mais souffre d'un GROS problème : rien n'est fait pour que les données de ton calendrier serve de validation pour le formulaire pour E1. En gros c'est normal que l'on puisse prendre 2 ou 3 fois un RDV à la même heure car tu n'as pas interdit l'heure une fois qu'elle a été réservée : la "logique" de réservation ne va que dans un sens
Marsh Posté le 12-09-2014 à 00:40:45
Bonjour,
Je souhaiterai lier un agenda google et un formulaire drive pour proposer la prise de rendez-vous ligne à mes clientes.
J'ai don cherché un tutoriel et j'ai trouver celui-ci: http://espacemultimedia.cc-canton- [...] gle-drive/
J'ai suivi toutes les étapes et essayer de cogiter pour l'adapter à mon formulaire. J'ai reussi a l'adapter mais lorsque l'on prend un rendez-vous via le formulaire et que la page (navigateur) de l'agenda est réactualisée, je me retrouve avec des doublons, c'est à dire plusieurs rendez-vous sur la meme ligne, de la meme personne à la meme heure. C'est très moche et ça fait pas très pro.
Sachant que je suis une vraie cruche en programmation (bien que cela m'interesse beaucoup) je ne pratique qu'en amateur et souvent je bug (lol). J'aimerai avoir vos lumières pour savoir ce que je dois modifier pour eviter les doublons et les plantages éventuels.
Je vous joins le liens vers le formulaire en question: https://docs.google.com/forms/d/1Nv [...] M/viewform
Et le code que j'ai modifier et adapté et que je pense être du javascript:
var EVENT_IMPORTED = "AJOUTE"; // Ajoutera le texte "AJOUTE" dans la colonne U
var ss = SpreadsheetApp.getActiveSpreadsheet();
function onOpen() {
var menuEntries = [{name: "Ajouter les événements à l'agenda", functionName: "importCalendar"}];
ss.addMenu("Agenda", menuEntries); // Pour ajouter une menu Agenda et un sous-menu "ajouter les événements" dans la feuille de calcul. Cela permettra de tester manuellement la liaison entre la feuille de calcul et l'agenda
}
function importCalendar() {
var sheet = SpreadsheetApp.getActiveSheet();
var startcolumn = 2; // Première colonne de prise en compte des données, soit la colonne B (titre du rendez-vous)
var numcolumns = 30; // Nombre de colonne
var dataRange = sheet.getRange(startcolumn, 1, numcolumns, 21) // Nombre de colonne contenant des données
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var column = data[i];
var titre = column[7]; // Colonne H - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre2 = column[8]; // Colonne I - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre3 = column[9]; // Colonne J - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre4 = column[10]; // Colonne K - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre5 = column[11]; // Colonne L - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre6 = column[12]; // Colonne M - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre7 = column[13]; // Colonne N - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre8 = column[14]; // Colonne O - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre9 = column[15]; // Colonne P - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre10 = column[16]; // Colonne Q - Titre de l'événement dans l'agenda - Titre du rendez-vous
var titre11 = column[18]; // Colonne S - Titre de l'événement dans l'agenda - Titre du rendez-vous
var DateDebut = column[6]; // Colonne C - date et heure de début de l'événement
var DateFin = column[19]; // Colonne T - date et heure de fin de l'événement
var Civilite = column[1]; // Colonne B - Genre du contact
var Nom = column[2]; // Colonne C - Nom du contact
var Prenom = column[3]; // Colonne D - Prenom
var NumTel = column[4]; // Colonne E - Numéro de téléphone
var Email = column[5]; // Colonne F - Email
var Message = column[17]; // Colonne R - Motif du rendez-vous
var description = "Nom du contact : "+ Nom +" "+ titre +" "+ titre2 +" "+ titre3 +" "+ titre4 +" "+ titre5 +" "+ titre6 +" "+ titre7 +" "+ titre8 +" "+ titre9 +" "+ titre10 +" "+ titre11 //concatenation des champs des colonnes E à J destinée à la zone Description de l'agenda
var eventImported = column[21];// Colonne U - Statut de l'importation - colonne AJOUTE A L'AGENDA
var setupInfo = ss.getSheetByName("agenda" ); // Nom de la feuille de calcul contenant la nom de l'agenda
var calendarName = setupInfo.getRange("A1" ).getValue(); // Référence de la cellule contenant le nom de l'agenda
if (eventImported != EVENT_IMPORTED && titre != "" ) { // Evite les doublons dans l'agenda, si le texte AJOUTE est présent en U, l'événement n'est pas ajouté
var cal = CalendarApp.openByName(calendarName);
cal.createEvent(titre, new Date(DateDebut), new Date(DateFin), {description : description}); // Création de l'événement dans l'agenda avec le titre, la date de début, la date de fin et la description complète
sheet.getRange(startcolumn + i, 21).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données
SpreadsheetApp.flush();
}
}
}
Merci beaucoup pour votre aide.