Vous saisirez ensuite l'expression Arcade suivante :
Expects($feature,"*")
// Fonction permettant de construire la partie horaire du calendrier
function GenererPlagesHoraires(HeureMinCalendrier,HeureMaxCalendrier,HeureOuvertureAM,
HeureFermetureAM,HeureOuverturePM,HeureFermeturePM){
// Récupération du nombre minutes de la plage horaire du calendrier
var MinutesDansLaPlage = DateDiff(HeureMaxCalendrier,HeureMinCalendrier,"minutes")
// On initialise la variable du bloc HTML de la cellule du tableau
var strTD = ""
// Si les heures d'ouverture AM et d'ouverture PM sont bien défines
if(!IsEmpty(HeureOuvertureAM) && !IsEmpty(HeureOuverturePM)){
// Position des heures d'ouverture dans la journée
var MinutesOuvertureAM = DateDiff(HeureOuvertureAM,HeureMinCalendrier,"minutes")
var MinutesFermetureAM = DateDiff(HeureFermetureAM,HeureMinCalendrier,"minutes")
var MinutesOuverturePM = DateDiff(HeureOuverturePM,HeureMinCalendrier,"minutes")
var MinutesFermeturePM = DateDiff(HeureFermeturePM,HeureMinCalendrier,"minutes")
// Calcul du nombre de pixels pour séparer bloc vert pour l'ouverture du matin
var pixels_ouvertureAM = Floor((MinutesOuvertureAM/MinutesDansLaPlage)*350)
var pixels_fermetureAM = Floor((MinutesFermetureAM/MinutesDansLaPlage)*350)
// Calcul du nombre de pixels pour séparer bloc vert pour l'ouverture de l'après-midi
var pixels_ouverturePM = Floor((MinutesOuverturePM/MinutesDansLaPlage)*350)
var pixels_fermeturePM = Floor((MinutesFermeturePM/MinutesDansLaPlage)*350)
// Bloc gris (fermé)
strTD += "<td style='width: "+pixels_ouvertureAM+"px;background-color: #cccccc'></td>"
// 1er Bloc vert (ouvert le matin)
strTD += "<td style='width: "+(pixels_fermetureAM - pixels_ouvertureAM)+
"px;background-color: #00cc00;color: #FFFFFF;font-size: 7pt;text-align: center'>"
+Text(HeureOuvertureAM,"H:mm")+" - " + Text(HeureFermetureAM,"H:mm") +"</td>"
// Bloc gris (fermé entre matin et après-midi)
strTD += "<td style='width: "+(pixels_ouverturePM - pixels_fermetureAM)+
"px;background-color: #cccccc;color: #FFFFFF;font-size: 7pt;text-align: center'></td>"
// 2ème Bloc vert (ouvert l'après-midi)
strTD += "<td style='width: "+(pixels_fermeturePM - pixels_ouverturePM)+
"px;background-color: #00cc00;color: #FFFFFF;font-size: 7pt;text-align: center'>"
+Text(HeureOuverturePM,"H:mm")+" - " + Text(HeureFermeturePM,"H:mm") +"</td>"
strTD += "<td style='width: "+ (350 - pixels_fermeturePM) +
"px;background-color: #cccccc;font-size: 7pt;'></td>"
}
// Si l'entité a une plage d'ouverture uniquement le matin
else if(!IsEmpty(HeureOuvertureAM) && IsEmpty(HeureOuverturePM)){
// Position des heures d'ouverture dans la journée
var MinutesOuvertureAM = DateDiff(HeureOuvertureAM,HeureMinCalendrier,"minutes")
var MinutesFermetureAM = DateDiff(HeureFermetureAM,HeureMinCalendrier,"minutes")
// Calcul du nombre de pixels pour séparer bloc vert pour l'ouverture du matin
var pixels_ouvertureAM = Floor((MinutesOuvertureAM/MinutesDansLaPlage)*350)
var pixels_fermetureAM = Floor((MinutesFermetureAM/MinutesDansLaPlage)*350)
// Bloc gris (fermé)
strTD += "<td style='width: "+pixels_ouvertureAM+"px;background-color: #cccccc'></td>"
// Bloc vert (ouvert le matin)
strTD += "<td style='width: "+(pixels_fermetureAM - pixels_ouvertureAM)+
"px;background-color: #00cc00;color: #FFFFFF;font-size: 7pt;text-align: center'>"
+Text(HeureOuvertureAM,"H:mm")+" - " + Text(HeureFermetureAM,"H:mm") +"</td>"
strTD += "<td style='width: "+ (350 - pixels_fermetureAM) +
"px;background-color: #cccccc;font-size: 7pt;'></td>"
}
// Si l'entité a une plage d'ouverture uniquement l'après-midi
else if(IsEmpty(HeureOuvertureAM) && !IsEmpty(HeureOuverturePM)){
// Position des heures d'ouverture dans la journée
var MinutesOuverturePM = DateDiff(HeureOuverturePM,HeureMinCalendrier,"minutes")
var MinutesFermeturePM = DateDiff(HeureFermeturePM,HeureMinCalendrier,"minutes")
// Calcul du nombre de pixels pour séparer bloc vert pour l'ouverture de l'après-midi
var pixels_ouverturePM = Floor((MinutesOuverturePM/MinutesDansLaPlage)*350)
var pixels_fermeturePM = Floor((MinutesFermeturePM/MinutesDansLaPlage)*350)
// Bloc gris (fermé)
strTD += "<td style='width: "+pixels_ouverturePM+"px;background-color: #cccccc'></td>"
// Bloc vert (ouvert l'après-midi)
strTD += "<td style='width: "+(pixels_fermeturePM - pixels_ouverturePM)+
"px;background-color: #00cc00;color: #FFFFFF;font-size: 7pt;text-align: center'>"
+Text(HeureOuverturePM,"H:mm")+" - " + Text(HeureFermeturePM,"H:mm") +"</td>"
strTD += "<td style='width: "+ (350 - pixels_fermeturePM) +
"px;background-color: #cccccc;font-size: 7pt;'></td>"
}
// Si aucune heure d'ouverture ou de fermeture n'est défninie alors c'est fermé toute la journée !
else{
// On créé 2 blocs gris cote à cote pour une largeur totale de 350px
strTD += "<td style='width: 175px;background-color: #CCCCCC'></td>"
strTD += "<td style='width: 175px;background-color: #CCCCCC'></td>"
}
return strTD
}
var ListeJourSemaine=["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
// 2 variables pour définir les heures min et max des journées dans le calendrier
var HeureMinCalendrier = Time("07:00")
var HeureMaxCalendrier = Time("19:00")
// On initialise la variable contenant le bloc HTML de la fenêtre contextuelle
var strHTML = ""
// On commence à construire le paragraphe de texte
strHTML += "<p style='font-family: Arial; font-size: 10pt;'>Horaires d'ouverture<br/>"
// Varaible pour gérer la bordure supérieure du premier tableau
var border_top = ""
strHTML += "<table style='border-collapse: collapse;font-family: Arial; font-size: 10pt;'>"
strHTML += "<tr style='border: Opx solid;'><td style='width: 80px;'> </td>"
strHTML += "<td style='width: 175px;text-align: left;font-size: 7pt;'>"+
Text(HeureMinCalendrier,"H:mm")+"</td>"
strHTML += "<td style='width: 175px;text-align: right;font-size: 7pt;'>"+
Text(HeureMaxCalendrier,"H:mm")+"</td>"
// Fin du tableau
strHTML += "</tr></table>"
// On boucle sur chaque jour de la semaine
for(var i in ListeJourSemaine)
{
var NomDuJour = ListeJourSemaine[i]
// On démarre un nouveau tableau
strHTML += "<table style='border-collapse: collapse;font-family: Arial; font-size: 9pt;'>"
// Si la ligne courante (i va de 0 à 6) est égal au jour courant (ISOWeekday de 1 à 7)
// alors on met la ligne en gras et su fond gris clair
if(i == ISOWeekday(Today())-1){
strHTML += "<tr style='border: 1px solid;" + border_top + ";"
strHTML += "background-color: #EEEEEE;font-weight: bold'>"
}else{
strHTML += "<tr style='border: 1px solid;" + border_top + ";'>"
}
// La première cellule contient le nom du jour
strHTML += "<td style='width: 80px;padding-left: 5px;'>" + NomDuJour+"</td>"
// On récupère les heures d'ouverture et de fermeture correspondant à ce
// jour de la semaine
var HeureOuvertureAM = $feature["Ouverture_"+NomDuJour+"_AM"]
var HeureFermetureAM = $feature["Fermeture_"+NomDuJour+"_AM"]
var HeureOuverturePM = $feature["Ouverture_"+NomDuJour+"_PM"]
var HeureFermeturePM = $feature["Fermeture_"+NomDuJour+"_PM"]
// Appel de la fonction remplissant la partie horaire du calendrier
strHTML += GenererPlagesHoraires(HeureMinCalendrier,HeureMaxCalendrier,HeureOuvertureAM,
HeureFermetureAM,HeureOuverturePM,HeureFermeturePM)
// Fin du tableau
strHTML += "</tr></table>"
// Pour les autres jours/tableaux, la bordure supérieure sera invisible
border_top = "border-top: 0px;"
}
strHTML += "</p>"
// On renvoie le bloc de code HTML de la fenêtre contextuelle
return {
type : 'text',
text : strHTML
}