1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr"> 3<head> 4
4<script> 5 window.dataLayer = window.dataLayer || []; 6 function gtag() { dataLayer.push(arguments); } 7 gtag('consent', 'default', { 8 'ad_user_data': 'denied', 9 'ad_personalization': 'denied', 10 'ad_storage': 'denied', 11 'analytics_storage': 'denied', 12 'wait_for_update': 2000, 13 }); 14 dataLayer.push({'gtm.start': new Date().getTime(), 'event': 'gtm.js'}); 15 </script>
15 16 17 <!-- Google Tag Manager --> 18
18<script>
vendor: 346 bytes, lines 18-23
18 19 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 20 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 21 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 22 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 23 })(window,document,'script','dataLayer','
23GTM-PHZQP63
vendor: 6 bytes, lines 23-24
23'); 24
24</script>
24 25 <!-- End Google Tag Manager --> 26 27 <!-- Meta Pixel Code --> 28
28<script>
vendor: 432 bytes, lines 28-37
28 29 !function(f,b,e,v,n,t,s) 30 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 31 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 32 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 33 n.queue=[];t=b.createElement(e);t.async=!0; 34 t.src=v;s=b.getElementsByTagName(e)[0]; 35 s.parentNode.insertBefore(t,s)}(window, document,'script', 36 'https://connect.facebook.net/en_US/fbevents.js'); 37 fbq('init', '
371594851535529088
vendor: 35 bytes, lines 37-39
37'); 38 fbq('track', 'PageView'); 39
39</script>
39 40 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1594851535529088&ev=PageView&noscript=1" /></noscript> 41 <!-- End Meta Pixel Code --> 42 43 <!--<base href="https://www.mytime.fr">--> 44 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 45 46 <!-- robots --> 47 <meta name="robots" content="all" /> 48 <meta name="revisit-after" content="7 days" /> 49 <meta name="google-site-verification" content="cdATs3ZxnZOZyKVzxRF9ckZEVJcCTZ8eNrY7rFw_P28" /> 50 51 <!-- website infos --> 52 <meta name="author" content="MYTIME" /> 53 54 <!-- lang --> 55 <link rel="alternate" hreflang="fr" href="https://www.mytime.fr" /> 56 57 <!-- title / desc / keywords--> 58 <title>myTime - Service de pointage par téléphone, application, NFC, flashcode⦠adapté à votre besoin</title> 59 <meta name="description" content="" /> 60 <meta name="keywords" content="pointeuse virtuelle, logiciel de gestion des heures travaillées, pointeuse mobile, sirh, logiciel temps travail" /> 61 <link rel="canonical" href="https://www.mytime.fr/presentation-de-la-solution-de-pointeuse-virtuelle" /> 62 63 <!-- affichage --> 64 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 65 <!--<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no" />--> 66 <meta name="HandheldFriendly" content="True"> 67 <meta name="MobileOptimized" content="320"> 68 <!--[if lt IE 9]><meta http-equiv="X-UA-Compatible" content="IE=edge" /><![endif]--> 69 70 <!-- icons & favicon --> 71 <link rel="icon" type="image/x-icon" href="/images/favicon.ico" /> 72 <!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico" /><![endif]--> 73 74 <link rel="icon" type="image/png" sizes="16x16" href="/images/logo/favicon-16x16.png" /> 75 <link rel="icon" type="image/png" sizes="32x32" href="/images/logo/favicon-32x32.png" /> 76 <link rel="icon" type="image/png" sizes="96x96" href="/images/logo/favicon-96x96.png" /> 77 <link rel="icon" sizes="196x196" href="/images/logo.png" /> 78 <link rel="manifest" href="/images/logo/manifest.json" /> 79 80 81 <!-- Paramétrages Apple (splashscreen) --> 82 <meta name="mobile-web-app-capable" content="yes" /> 83 <meta name="apple-mobile-web-app-capable" content="yes" /> 84 <meta name="apple-mobile-web-app-status-bar-style" content="default" /> 85 86 <!-- Paramétrages Windows --> 87 <meta name="msapplication-TileColor" content="#265983"> 88 <meta name="msapplication-TileImage" content="/images/logo/ms-icon-144x144.png"> 89 90 <!-- preconnect --> 91 <link rel="preconnect" href="//www.google.com" /> 92 <link rel="preconnect" href="//fonts.googleapis.com" /> 93 <link rel="preconnect" href="//fonts.gstatic.com" crossorigin /> 94 <link rel="preconnect" href="//chat.chatra.io" /> 95 96 <!-- font --> 97 <link href="https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&family=Noto+Sans:ital,wght@0,100..900;1,100..900&family=Pacifico&family=Poppins:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet" /> 98 99 <!-- fichiers CSS --> 100 <link rel="preload" href="/dist/app.bundle.css?1787867340" as="style" /> 101 102 <link rel="stylesheet" href="/dist/app.bundle.css?1787867340"/> 103 104 <!-- fichiers JS --> 105 <link rel="preload" href="/dist/jquery.bundle.js?1787867340" as="script"/> 106 <link rel="preload" href="/dist/runtime.bundle.js?1787867340" as="script"/> 107 <link rel="preload" href="/dist/vendors.bundle.js?1787867340" as="script"/> 108 <link rel="preload" href="/dist/commons.bundle.js?1787867340" as="script"/> 109 <link rel="preload" href="/dist/app.bundle.js?1787867340" as="script"/> 110 <link rel="preload" href="/dist/init.bundle.js?1787867340" as="script"/> 111
111<script src="/dist/jquery.bundle.js?1787867340"></script>
111 112<!--
112<script defer src="--><!--js/lib/bootstrap-select-1.14.0-dev/js/bootstrap-select_v1.14.0-beta4.js"></script>
112--> 113 114
114<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"SoftwareApplication","name":"MyTime","applicationCategory":"BusinessApplication","operatingSystem":"Android, iOS, Web","offers":{"@type":"Offer","price":"5.50","priceCurrency":"EUR"},"aggregateRating":{"@type":"AggregateRating","ratingValue":"4.8","reviewCount":"40"}}</script>
114 115 116</head> 117<body class=" d-flex flex-column h-100"> 118 <!-- Google Tag Manager (noscript) -->
vendor: 70 bytes, lines 118-119
118 119 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
119GTM-PHZQP63
vendor: 85 bytes, lines 119-120
119" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 120
120<!-- End Google Tag Manager (noscript) --> 121 122 123 124 125 <nav class="navbar navbar-main navbar-expand-lg" style=" "> 126 <div class="container"> 127 <div class="navbar-header float-start"> 128 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-main" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> 129 <span class="navbar-toggler-icon"></span> 130 </button> 131 <a href="/" class="lien_logo_img" title="myTime, Votre pointeuse virtuelle"> 132 <img loading="lazy" src="/images/logo/mytime.png" alt="" title="myTime" /> 133 </a> 134 <a href="/" class="lien_logo_txt police_mytime" title="myTime, Votre pointeuse virtuelle"> 135 myTime 136 </a> 137 </div> 138 139 <div class="collapse navbar-collapse" id="navbar-main"> 140 <ul class="nav navbar-nav m-auto"> 141 <li class="nav-item dropdown"> 142 <a class="nav-link solution" href="/presentation-de-la-solution-de-pointeuse-virtuelle" data-bs-toggle="dropdown">Fonctionnalités</a> 143 <div class="dropdown-menu"></div> 144 </li> 145 <li class="nav-item"><a class="nav-link" href="/demo-du-systeme-de-pointage">Démo</a></li> 146 <li class="nav-item"><a class="nav-link" href="/tarifs-du-service-de-pointage-par-telephone">Tarifs</a></li> 147<!-- <li class="nav-item get_demo"><a class="nav-link hide_btn_before_init" href="#" data-bs-toggle="modal" data-bs-target="#modal_get_demo">Planifier une démo</a></li>--> 148 </ul> 149 </div> 150 151 <div class="float-end"> 152 <a href="#" class="btn btn-outline blue hide_btn_before_init me-2" data-bs-toggle="modal" data-bs-target="#modal_user_login">Se connecter</a> 153 <a href="#" class="btn btn-filled blue hide_btn_before_init" data-bs-toggle="modal" data-bs-target="#modal_user_subscribe">Essai gratuit</a> 154 </div> 155 </div><!-- /.container-fluid --> 156 </nav> 157 <div class="cl"></div> 158 <main class="public"> 159 160 161 162<div class="solution"> 163 <div class="colored-card grey-card purple-ellipse pb-0"> 164 <div class="row"> 165 <div class="col-md-6"> 166 <br><br><br><br> 167 <span class="button-label green">La Solution</span> 168 <br><br> 169 <div class="text-presentation-title mb-2"> 170 Révolutionnez votre Gestion RH 171 </div> 172 <h1 class="text-presentation"> 173 Digitalisez le Pointage avec MyTime 174 </h1> 175 <br> 176 <div> 177 <a href="#" class="btn btn-filled blue hide_btn_before_init me-2" data-bs-toggle="modal" data-bs-target="#modal_user_subscribe">Essai gratuit <i class="fas fa-chevron-right ms-5"></i></a> 178 <a href="#" class="btn btn-outline blue hide_btn_before_init" data-bs-toggle="modal" data-bs-target="#modal_get_demo">Planifier une Démo <i class="fas fa-chevron-right ms-5"></i></a> 179 <br> 180 <div class="text-info-small mt-1"> 181 <img src="/images/icons/no-credit-card.svg" alt="" /> Pas de carte bancaire requise 182 </div> 183 <br> 184 185 <div class="row mt-2 mb-4"> 186 <div class="col-md-6"> 187 <div class="hreview-aggregate"> 188 <span class="fn" style="display: none">myTime</span> 189 <div class="mb-1"> 190 <span class="rating_stars" data-note="4.8"></span> 191 <span class="rating"> 192 <span class="average">4.8</span>/<span class="best">5</span> sur <span class="votes">40</span> avis récents 193 </span> 194 </div> 195 </div> 196 </div> 197 <div class="col-md-6"> 198 <div class="app_links"> 199 <a href="https://play.google.com/store/apps/details?id=com.osimatic.mytime" class="url_app_android"><i class="fab fa-google-play"></i> Google Play</a> 200 <a href="https://itunes.apple.com/fr/app/mytime-pointeuse-virtuelle/id988395830" class=""><span class="available"><i class="fab fa-apple"></i> Apple Store</a> 201 </div> 202 </div> 203 </div> 204</div> </div> 205 <div class="col-md-6"> 206 <img src="/images/home/app_calendar3.png" alt="" class="w-100 floatRight"> 207 </div> 208 </div> 209 </div> 210 211 <div class="colored-card grey-card mt-4 pt-4 pb-0"> 212 <div class="text-presentation text-center mt-2"> 213 Le pointage vraiment flexible 214 </div> 215 <div class="text-precision text-center mt-1 w-50 m-auto"> 216 Découvrez comment MyTime révolutionne la gestion et le suivi des temps de travail. 217 Notre solution complète vous offre un contrôle absolu sur votre gestion des ressources humaines. 218 Contrôlez précisément les entrées et sorties de vos salariés à distance, où que vous soyez, à tout moment. 219 </div> 220 221 <img src="/images/home/calendar3.png" alt="" class="w-100" /> 222 </div> 223 224
225 <div class="usages-list mt-5 p-3"> 226 <div class="text-center"> 227 <span class="button-label blue">Que pouvons-nous faire</span> 228 <div class="text-presentation text-center mt-2 w-50 m-auto"> 229 Découvrez tout ce que myTime peut faire pour vous 230 </div> 231 </div> 232 233 <div class="row usage" id="tableau_de_bord"> 234 <div class="col-md-1"></div> 235 <div class="col-md-5 text left order-first"> 236 <div class="detail"> 237 <h3>Une supervision optimale de vos employés</h3> 238 <div class="desc"> 239 <p>Soyez sûr que vos employés sont bien arrivés sur leur lieu de travail à lâheure prévue. Bénéficiez dâun système de contrôle par géolocalisation, par adresse IP et par photo lors du pointage.</p> 240 <p>Le contrôle par géolocalisation vous permet de vérifier que vos employés sont bien présents sur le site où ils sont censés être. Le contrôle par adresse IP vous permet de confirmer que les pointages sont bien effectués depuis lâadresse IP de lâentreprise. Enfin, le contrôle par photo permet de sâassurer que la personne qui pointe est bien lâemployé en question.</p> 241 <p>MyTime est particulièrement utile pour les entreprises qui supervisent des équipes à distance ou qui ont des employés isolés. Vous pouvez ainsi superviser vos équipes à distance tout en ayant lâesprit tranquille.</p> 242 <p>Avec MyTime, vous avez accès à une solution de gestion des temps complète et sécurisée. </p> 243 </div> 244 </div> 245 </div> 246 <div class="col-md-5 order-last"> 247 <div class="image green w-80 m-auto"> 248 <img src="/images/home/usage_listing.png" class="image-bg1" alt=""> 249 </div> 250 </div> 251 </div> 252 <div class="row usage" id="planning"> 253 <div class="col-md-1"></div> 254 <div class="col-md-5 text right order-last"> 255 <div class="detail"> 256 <h3>Optimisez la productivité grâce à une gestion efficace des horaires </h3> 257 <div class="desc"> 258 <p>La gestion du temps et des plannings est une tâche essentielle pour toute entreprise. Les salariés doivent savoir à lâavance quand ils travaillent, combien dâheures ils doivent effectuer et quels sont les horaires de travail. Câest pourquoi MyTime vous offre une fonctionnalité de gestion du temps et des plannings complète pour vous aider à gérer facilement les horaires de travail de vos salariés.</p> 259 <p>Avec MyTime, planifiez les horaires de vos salariés en quelques clics. Grâce à une interface intuitive, les managers peuvent facilement affecter des heures de travail à chaque salarié en fonction des disponibilités. </p> 260 <p>De plus, vos salariés peuvent facilement consulter leur planning depuis lâapplication MyTime et être informés en temps réel des modifications apportées à leur emploi du temps.</p> 261 <p>MyTime permet également de calculer précisément les temps de travail des salariés, y compris les heures supplémentaires, les heures de nuit, les heures de week-end et les heures de déplacement. </p> 262 <p>Enfin, MyTime est capable de remonter les écarts de planning, ce qui permet aux managers de détecter rapidement les erreurs et les retards. Cette fonctionnalité est un atout majeur pour les entreprises qui cherchent à optimiser leur productivité et à réduire les coûts liés aux retards et aux erreurs.</p> 263 <p>Essayez dès maintenant MyTime pour optimiser la gestion de vos équipes et de vos plannings.</p> 264 </div> 265 </div> 266 </div> 267 <div class="col-md-5 order-first"> 268 <div class="image blue w-80 m-auto"> 269 <img src="/images/home/calendar.png" class="image-bg2" alt=""> 270 </div> 271 </div> 272 </div> 273 <div class="row usage" id="alerts"> 274 <div class="col-md-1"></div> 275 <div class="col-md-5 text left order-first"> 276 <div class="detail"> 277 <h3>Garantissez la ponctualité, évitez les erreurs et optimisez vos coûts</h3> 278 <div class="desc"> 279 <p>Les alertes en temps réel permettent aux superviseurs de recevoir des alertes instantanées en cas de non pointage, de pointage en dehors des horaires autorisés ou de non-respect de la durée de travail. Ces alertes permettent aux superviseurs de réagir rapidement en cas de problème et de prendre les mesures nécessaires.</p> 280 <p>Grâce à cette fonctionnalité, les entreprises peuvent éviter les retards, les erreurs et les dépassements de coûts liés aux heures supplémentaires. Les superviseurs peuvent également avoir une vue dâensemble des heures travaillées par chaque salarié et sâassurer que chaque salarié respecte sa durée de travail.</p> 281 <p>Nous vous invitons à planifier une démo dès maintenant afin de découvrir toutes les fonctionnalités qui vous aideront à optimiser la gestion de vos équipes.</p> 282 </div> 283 </div> 284 </div> 285 <div class="col-md-5 order-last"> 286 <div class="image green w-80 m-auto"> 287 <img src="/images/home/surveillance.png" class="image-bg3" alt=""> 288 </div> 289 </div> 290 </div> 291 <div class="row usage" id="holidays"> 292 <div class="col-md-1"></div> 293 <div class="col-md-5 text right order-last"> 294 <div class="detail"> 295 <h3>
295Gestion des Congés et Absences : Facilitez la Vie de Vos Employés</h3> 296 <div class="desc"> 297 <p>La gestion des congés et des absences est une tâche complexe pour les entreprises qui doivent suivre de près les demandes de leurs salariés et sâassurer que chacun bénéficie de ses jours de congés. MyTime offre une fonctionnalité de gestion des congés et des absences complète pour faciliter cette tâche.</p> 298 <p>Grâce à MyTime, les salariés peuvent facilement effectuer leur demande de congés et dâabsences via lâapplication mobile MyTime ou via leur espace RH. Les superviseurs peuvent ensuite accepter ou refuser les demandes en quelques clics et être informés des congés et des absences de chaque salarié grâce au planning.</p> 299 <p>Un compteur de congés payés, RTT et de récupération est également disponible pour chaque salarié. Cela permet aux superviseurs de vérifier rapidement le nombre de congés restants pour chaque collaborateur et de sâassurer que chacun bénéficie de ses jours de congés dans le respect des règles en vigueur.</p> 300 <p>Enfin, MyTime offre un calendrier complet avec les absences, les arrêts et les congés de chaque salarié. Cela permet aux superviseurs dâavoir une vue dâensemble de lâactivité de leur entreprise et de mieux organiser les horaires de travail en fonction des congés et des absences de chaque salarié.</p> 301 <p>Nâhésitez pas à nous contacter pour plus dâinformations ou pour planifier une démonstration avec un expert.</p> 302 </div> 303 </div> 304 </div> 305 <div class="col-md-5 order-first"> 306 <div class="image blue w-80 m-auto"> 307 <img src="/images/home/conges.png" class="image-bg4" alt=""> 308 </div> 309 </div> 310 </div> 311 <div class="row usage" id="trip"> 312 <div class="col-md-1"></div> 313 <div class="col-md-5 text left order-first"> 314 <div class="detail"> 315 <h3>Optimisez les déplacements et réduisez les coûts avec MyTime</h3> 316 <div class="desc"> 317 <p>Pour les entreprises dont les salariés sont amenés à se déplacer régulièrement sur le terrain, la gestion des trajets et des déplacements peut être une tâche complexe et chronophage. Câest pourquoi MyTime offre une fonctionnalité de gestion des trajets et des déplacements complète pour faciliter cette tâche.</p> 318 <p>Grâce au pointage avec géolocalisation, MyTime peut calculer précisément les distances entre deux lieux dâintervention et comptabiliser les heures et les distances de trajets. Les superviseurs peuvent ainsi avoir une vue dâensemble des trajets effectués par leurs salariés et sâassurer que les coûts liés aux déplacements sont correctement calculés.</p> 319 <p>La gestion des déplacements peut également être automatisée selon la configuration du superviseur. MyTime permet en effet de définir des règles spécifiques pour chaque salarié en fonction de ses habitudes de déplacement. </p> 320 <p>Les heures et les distances de petits et grands déplacements peuvent ainsi être comptabilisées automatiquement, ce qui facilite la tâche des superviseurs et réduit les risques dâerreurs de saisie.</p> 321 <p>En outre, MyTime permet la gestion des déplacements automatiques entre plusieurs lieux de pointage. Les salariés peuvent ainsi indiquer leur point de départ et leur point dâarrivée, et MyTime calculera automatiquement le trajet le plus court entre les deux points.</p> 322 <p>Enfin, la gestion des trajets et des déplacements est prise en compte dans le calcul des variables de paie, ce qui permet aux superviseurs de gérer facilement les coûts horaires et les coûts kilométriques associés aux déplacements.</p> 323 <p>Essayez MyTime dès maintenant et planifiez une démo avec un expert pour découvrir toutes les fonctionnalités.</p> 324 </div> 325 </div> 326 </div> 327 <div class="col-md-5 order-last"> 328 <div class="image green w-80 m-auto"> 329 <img src="/images/home/deplacement.png" class="image-bg5" alt=""> 330 </div> 331 </div> 332 </div> 333 <div class="row usage" id="listing"> 334 <div class="col-md-1"></div> 335 <div class="col-md-5 text right order-last"> 336 <div class="detail"> 337 <h3>Fini les Feuilles dâHeures Papier, exportez vos rapports en ligne !</h3> 338 <div class="desc"> 339 <p>Pour les entreprises souhaitant suivre de près lâactivité de leurs salariés, cette fonctionnalité est un outil indispensable. Elle permet aux superviseurs de consulter facilement les pointages et la durée de travail de leurs équipes, et dâexporter les rapports dâactivités en PDF ou CSV pour les imprimer ou les importer dans leur logiciel métier.</p> 340 <p>Les rapports dâactivités peuvent être exportés par chantier, client et mission, ce qui permet aux superviseurs de suivre précisément lâactivité de leur entreprise en fonction des projets en cours. Les rapports peuvent également être envoyés automatiquement par e-mail aux superviseurs, ce qui leur permet de rester informés de lâactivité de leur entreprise en temps réel.</p> 341 <p>Le rapport dâactivité des employés met en évidence les heures supplémentaires, les heures manquées et toutes les variables de paie des salariés : heures de nuit, heures de week-end, heures de jours fériés, heures de déplacement, heures de congés payés et de récupération. Cela permet aux superviseurs de calculer facilement les coûts liés aux variables de paie et de sâassurer que chaque salarié est payé en fonction de son temps de travail</p> 342 <p>Contactez-nous pour plus dâinformations ou pour planifier une démo en ligne avec un expert. </p> 343 </div> 344 </div> 345 </div> 346 <div class="col-md-5 order-first"> 347 <div class="image blue w-80 m-auto"> 348 <img src="/images/home/listing_jour.png" class="image-bg6" alt=""> 349 </div> 350 </div> 351 </div> 352 <div class="row usage" id="documents"> 353 <div class="col-md-1"></div> 354 <div class="col-md-5 text left order-first"> 355 <div class="detail"> 356 <h3>Simplifiez Votre Communication et stockez vos Documents</h3> 357 <div class="desc"> 358 <p>La gestion de documents est une tâche essentielle pour les entreprises qui s
358ouhaitent gérer efficacement leur activité et leurs ressources humaines. Cependant, cela peut rapidement devenir une tâche fastidieuse et chronophage. Câest pourquoi MyTime offre une fonctionnalité dédiée à la de gestion des documents pour permettre aux entreprises de gagner du temps et de lâefficacité.</p> 359 <p>Grâce à la gestion de documents de MyTime, toutes les informations importantes sont centralisées sur une seule plateforme. Les superviseurs et les salariés peuvent facilement accéder aux fiches de paie, aux contrats, aux justificatifs dâabsences et à tous les autres documents importants. Les documents sont stockés de manière sécurisée et sont facilement accessibles depuis nâimporte quel ordinateur.</p> 360 <p>Enfin, MyTime permet aux entreprises de partager des documents avec leurs clients, tels que des factures ou des rapports dâactivité. Cela facilite la communication et permet aux entreprises de gagner du temps en évitant dâavoir à envoyer des documents par e-mail ou par courrier.</p> 361 <p>Contactez-nous dès maintenant pour bénéficiez dâune démonstration avec un expert.</p> 362 </div> 363 </div> 364 </div> 365 <div class="col-md-5 order-last"> 366 <div class="image green w-80 m-auto"> 367 <img src="/images/home/documents.png" class="image-bg7" alt=""> 368 </div> 369 </div> 370 </div> 371 <div class="row usage" id="api"> 372 <div class="col-md-1"></div> 373 <div class="col-md-5 text right order-last"> 374 <div class="detail"> 375 <h3>Intégration Transparente avec lâAPI Web MyTime</h3> 376 <div class="desc"> 377 <p>Pour les entreprises qui souhaitent intégrer MyTime à leur système dâinformation existant, notre API Web est une solution idéale. LâAPI Web de MyTime permet aux entreprises de récupérer en temps réel tous les pointages dans leur base de données.</p> 378 <p>Grâce à cette fonctionnalité, les entreprises peuvent récupérer toutes les données de MyTime dans leur base de données, y compris les pointages, les temps de travail, les absences et les congés. Les superviseurs peuvent ainsi suivre de près lâactivité de leurs salariés et gérer leur temps de travail de manière efficace.</p> 379 <p>MyTime offre une documentation technique complète pour faciliter lâintégration de lâAPI Web. Les développeurs peuvent ainsi suivre facilement les étapes dâimplémentation de lâAPI Web et assurer une intégration efficace sans erreur.</p> 380 <p>Contactez-nous nous pour en savoir plus.</p> 381 </div> 382 </div> 383 </div> 384 <div class="col-md-5 order-first"> 385 <div class="image blue w-80 m-auto"> 386 <img src="/images/home/dashboard.png" class="image-bg8" alt=""> 387 </div> 388 </div> 389 </div> 390 </div> 391 392 <div class="bg-grey mt-4 mb-4"> 393 <div class="assistance p-5"> 394 <div class="container"> 395 <div class="row"> 396 <div class="col-md-4"> 397 <div class="illustration"> 398 <img src="/images/home/assistance2.jpg" class="customer" alt="" /> 399 <div class="colored-card white-card infobulle text-start"> 400 <div class="icon-thumbnail floatLeft"><i class="fas fa-phone-alt "></i></div> 401 <div class="title fw-bold mt-1">Expert MyTime</div> 402 <div class="text-precision">En quoi puis-je vous aider ?</div> 403 </div> 404 </div> 405 406 </div> 407 <div class="col-md-8 ps-5 pt-4 pb-4"> 408 <span class="button-label blue">Accompagnement</span> 409 <div class="text-presentation mt-3">Quâattendez-vous pour <span class="text-purple">planifier une démo ?</span></div> 410 <br> 411 412 <div class="row text-center mt-4"> 413 <div class="col-md-4 avantage"> 414 <div class="icon-thumbnail icon-blue icon-bg-blue"><i class="fas fa-headset"></i></div> 415 <div class="title">Démo</div> 416 <div class="text-precision">Par téléphone ou visio</div> 417 </div> 418 <div class="col-md-4 avantage"> 419 <div class="icon-thumbnail icon-blue icon-bg-blue"><i class="far fa-clock"></i></div> 420 <div class="title">30 minutes</div> 421 <div class="text-precision">Pour nous découvrir</div> 422 </div> 423 <div class="col-md-4 avantage"> 424 <div class="icon-thumbnail icon-blue icon-bg-blue"><i class="fas fa-calendar-alt"></i></div> 425 <div class="title">14 jours</div> 426 <div class="text-precision">De test gratuit dès maintenant</div> 427 </div> 428 </div> 429 430 <div class="mt-5"> 431 <a href="#" class="btn btn-filled blue hide_btn_before_init" data-bs-toggle="modal" data-bs-target="#modal_get_demo">Planifier une Démo <i class="fas fa-chevron-right ms-5"></i></a> 432 </div> 433 </div> 434 </div> 435 </div> 436</div> </div> 437 438 439 440 <div class="bg-from-white-to-grey pt-5 pb-1"> 441 <div class="colored-card blue-card light pt-5"> 442 <div class="clock-event-methods-list"> 443 <span class="button-label green">Méthode de pointage</span> 444 <h2 class="text-presentation text-white w-75 mt-3 mb-2">Quelle méthode de pointage souhaitez-vous pour vos employés ?</h2> 445 446 <a href="#" class="btn btn-outline white hide_btn_before_init floatRight ms-5" data-bs-toggle="modal" data-bs-target="#modal_user_subscribe">Commencer <i class="fas fa-chevron-right ms-5"></i></a> 447 448 <div class="text-precision mt-3 mb-4"> 449 Multipliez les options selon vos préférences ! 450 </div> 451 <div class="cl"></div> 452 453 <div class="row mt-2"> 454 <div class="col-md-7"> 455 <div class="clock-event-method colored-card white-card pb-0"> 456 <img src="/images/home/iphone.png" class="floatRight ms-5" alt=""> 457 458 <div class="explication"> 459 <div class="card-title">Pointer par application mobile</div> 460 <div class="desc">Téléchargez lâapplication myTime et cliquez sur pointer</div> 461 <a href="/demo-du-systeme-de-pointage" class="blue-link">Voir plus <i class="fas fa-arrow-right ms-2"></i></a> 462 </div> 463 <div class="cl"></div> 464 </div> 465 </div> 466 <div class="col-md-5"> 467 <div class="clock-event-method colored-card white-card pb-0"> 468 <img src="/images/home/qr_code.png" class="floatLeft me-5" alt=""> 469 470 <div class="explication"> 471 <div class="card-title">Pointer par flashcode</div> 472 <div class="desc">Téléchargez lâapplication myTime et cliquez sur scanner un code barre</div> 473 <a href="/demo-du-systeme-de-pointage" class="blue-link">Voir plus <i class="fas fa-arrow-right ms-2"></i></a> 474 </div> 475 <div class="cl"></div> 476 </div> 477 </div> 478 </div> 479 <div class="row"> 480 <div class="col-md-4"> 481 <div class="clock-event-method colored-card white-card"> 482 <div class="text-center"> 483 <img src="/images/home/nfc.png" class="" alt=""> 484 </div> 485 486 <div class="explication pb-0"> 487 <div class="card-title">Pointer par NFC</div> 488 <div class="desc">Disposez votre smartphone sur la puce NFC et pointer</div> 489 <a href="/demo-du-systeme-de-pointage" class="blue-link">Voir plus <i class="fas fa-arrow-right ms-2"></i></a> 490 </div> 491 <div class="cl"></div> 492 </div> 493 </div> 494 <div class="col-md-4"> 495 <div class="clock-event-method colored-card white-card"> 496 <div class="text-center"> 497 <img src="/images/home/phone_call.png" class="" alt=""> 498 </div> 499 500 <div class="explication pb-0"> 501 <div class="card-title">Pointer par appel téléphonique</div> 502 <div class="desc">Appelez le numéro pour pointer et tapez le code employé</div> 503 <a href="/demo-du-systeme-de-pointage" class="blue-link">Voir plus <i class="fas fa-arrow-right ms-2"></i></a> 504 </div> 505 <div class="cl"></div> 506 </div> 507 </div> 508 <div class="col-md-4"> 509 <div class="clock-event-method colored-card white-card"> 510 <div class="text-center"> 511 <img src="/images/home/clock_in_url.png" class="" alt=""> 512 </div> 513 <div class="explication pb-0"> 514 <div class="card-title">Pointer par internet</div> 515 <div class="desc">Rendez-vous sur lâURL de pointage et indiquez le code employé</div> 516 <a href="/demo-du-systeme-de-pointage" class="blue-link">Voir plus <i class="fas fa-arrow-right ms-2"></i></a> 517 </div> 518 <div class="cl"></div> 519 </div> 520 </div> 521 </div> 522</div> </div> 523 </div> 524 525 <div class="bg-from-grey-to-white pt-5"> 526 <div class="temoignages"> 527 <div class="container"> 528 <div class="text-center w-50 m-auto mb-4"> 529 <div class="pt-2">
530 <span class="button-label blue">Témoignages</span> 531 </div> 532 <h2 class="text-presentation mt-3">Ils nous font confiance</h2> 533 <div class="text-precision text-center">Découvrez comment nos clients transforment la gestion des temps, planifient et simplifient lâorganisation du travail de leurs équipes grâce à myTime.</div> 534 </div> 535 536 537 <div class="tab-content"> 538 <div class="tab-pane fade show active fade" id="temoignage_0" role="tabpanel"> 539 <div class="row temoignage"> 540 <div class="col-md-6"> 541 <div class="colored-card white-card p-5"> 542 <i class="fas fa-quote-left"></i> 543 <div class="activity">Travaux dâinstallation électrique</div> 544 <div class="text">Comment MyTime a révolutionné la gestion des temps de travail de cette entreprise industrielle.</div> 545 <hr> 546 <img src="/images/logo_customer/industrelec.png" class="logo" alt=""> 547 </div> 548 </div> 549 <div class="col-md-6"> 550 <img src="/images/customer/customer_05.jpg" class="customer" alt=""> 551 </div> 552 </div> 553 </div> 554 <div class="tab-pane fade fade" id="temoignage_1" role="tabpanel"> 555 <div class="row temoignage"> 556 <div class="col-md-6"> 557 <div class="colored-card white-card p-5"> 558 <i class="fas fa-quote-left"></i> 559 <div class="activity">Services de nettoyage professionnels</div> 560 <div class="text">Comment myTime permet de gérer efficacement la facturation en fonction des sites dâintervention.</div> 561 <hr> 562 <img src="/images/logo_customer/aps.jpg" class="logo" alt=""> 563 </div> 564 </div> 565 <div class="col-md-6"> 566 <img src="/images/customer/customer_07.jpg" class="customer" alt=""> 567 </div> 568 </div> 569 </div> 570 <div class="tab-pane fade fade" id="temoignage_2" role="tabpanel"> 571 <div class="row temoignage"> 572 <div class="col-md-6"> 573 <div class="colored-card white-card p-5"> 574 <i class="fas fa-quote-left"></i> 575 <div class="activity">Marché des gaz de pétrole liquéfiés</div> 576 <div class="text">Comment la souplesse et la flexibilité de MyTime a permis une transition vers le pointage numérique.</div> 577 <hr> 578 <img src="/images/logo_customer/butagaz.png" class="logo" alt=""> 579 </div> 580 </div> 581 <div class="col-md-6"> 582 <img src="/images/customer/customer_08.jpg" class="customer" alt=""> 583 </div> 584 </div> 585 </div> 586 <div class="tab-pane fade fade" id="temoignage_3" role="tabpanel"> 587 <div class="row temoignage"> 588 <div class="col-md-6"> 589 <div class="colored-card white-card p-5"> 590 <i class="fas fa-quote-left"></i> 591 <div class="activity">Accueil en entreprise et événementiel</div> 592 <div class="text">Comment myTime a renforcé notre transparence en offrant un accès à nos clients.</div> 593 <hr> 594 <img src="/images/logo_customer/demeter.png" class="logo" alt=""> 595 </div> 596 </div> 597 <div class="col-md-6"> 598 <img src="/images/customer/customer_06.jpg" class="customer" alt=""> 599 </div> 600 </div> 601 </div> 602 <div class="tab-pane fade fade" id="temoignage_4" role="tabpanel"> 603 <div class="row temoignage"> 604 <div class="col-md-6"> 605 <div class="colored-card white-card p-5"> 606 <i class="fas fa-quote-left"></i> 607 <div class="activity">Location de véhicule électrique</div> 608 <div class="text">Comment MyTime simplifie le calcul des heures de nuit et la gestion des repos compensateur.</div> 609 <hr> 610 <img src="/images/logo_customer/cityscoot.png" class="logo" alt=""> 611 </div> 612 </div> 613 <div class="col-md-6"> 614 <img src="/images/customer/customer_06.jpg" class="customer" alt=""> 615 </div> 616 </div> 617 </div> 618 </div> 619 620 <ul class="nav nav-pills"> 621 <li class="nav-item" role="presentation"> 622 <button class="nav-link active" data-bs-toggle="pill" data-bs-target="#temoignage_0" type="button" role="tab" aria-selected="false">1</button> 623 </li> 624 <li class="nav-item" role="presentation"> 625 <button class="nav-link " data-bs-toggle="pill" data-bs-target="#temoignage_1" type="button" role="tab" aria-selected="false">2</button> 626 </li> 627 <li class="nav-item" role="presentation"> 628 <button class="nav-link " data-bs-toggle="pill" data-bs-target="#temoignage_2" type="button" role="tab" aria-selected="false">3</button> 629 </li> 630 <li class="nav-item" role="presentation"> 631 <button class="nav-link " data-bs-toggle="pill" data-bs-target="#temoignage_3" type="button" role="tab" aria-selected="false">4</button> 632 </li> 633 <li class="nav-item" role="presentation"> 634 <button class="nav-link " data-bs-toggle="pill" data-bs-target="#temoignage_4" type="button" role="tab" aria-selected="false">5</button> 635 </li> 636 </ul> 637 </div> 638</div> </div> 639 640</div> 641
642<script> 643 $(function() { 644 if (User.isLogged()) { 645 window.location.href = URL_TABLEAU_DE_BORD; 646 return; 647 } 648 649 650 651 console.log('Coucou'); 652 function diff(a, b) { 653 function notContainedIn(arr) { 654 return element => arr.indexOf(element) === -1; 655 } 656 return a.filter(notContainedIn(b)).concat(b.filter(notContainedIn(a))); 657 } 658 console.log(diff([1, 2, 3, 5], [1, 2, 4, 5])); 659 }) 660</script>
660 661 662 663 664 665 </main> 666 <footer> 667 <div class="pre-footer"> 668 <div class="container"> 669 <div class="colored-card blue-card"> 670 <div class="row"> 671 <div class="col-md-6 presentation"> 672 <div class="text-presentation">Choisissez <span class="text-white">myTime pour un suivi optimal</span> des temps de travail.</div> 673 674 <a href="#" class="btn btn-filled white hide_btn_before_init me-2" data-bs-toggle="modal" data-bs-target="#modal_user_subscribe">Essai gratuit <i class="fas fa-chevron-right ms-5"></i></a> 675 <a href="#" class="btn btn-outline white hide_btn_before_init" data-bs-toggle="modal" data-bs-target="#modal_get_demo">Planifier une Démo <i class="fas fa-chevron-right ms-5"></i></a> 676 <br> 677 <div class="text-info-small mt-3"> 678 <img src="/images/icons/no-credit-card.svg" alt="" class="me-1" /> Pas de carte bancaire requise 679 </div> 680 </div> 681 <div class="col-md-6 illustration"> 682 <img loading="lazy" src="/images/home/calendar2.png" class="" alt="" /> 683 </div> 684 </div> 685 686 </div> 687 </div> 688 </div> 689 690 <div class="footer_content"> 691 <div class="container"> 692 <div class="row"> 693 <div class="col-md-3"> 694 <a href="/" class="lien_logo_img" title="myTime, Votre pointeuse virtuelle"> 695 <img loading="lazy" src="/images/logo/mytime.png" alt="" title="myTime" /> 696 </a> 697 <a href="/" class="lien_logo_txt police_mytime" title="myTime, Votre pointeuse virtuelle"> 698 myTime 699 </a> 700 </div> 701 <div class="col-md-9"> 702 <div class="text-presentation">Vos Ressources avec Précision, Où que Vous Soyez</div> 703 </div> 704 </div> 705 <hr> 706 <div class="row"> 707 <div class="col-md-3"> 708 <div class="title">La solution</div> 709 <ul class="liens"> 710 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#planning">Gestion des temps et planning</a><li> 711 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#planning">Contrôle des présences</a><li> 712 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#alerts">Alertes en temps réel</a><li> 713 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#holidays">Congés et absences</a><li> 714 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#trip">Trajets et déplacements</a><li> 715 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#documents">Communication et documents</a><li> 716 <li><a href="/presentation-de-la-solution-de-pointeuse-virtuelle#api">API Web</a><li> 717 </ul> 718 </div> 719 <div class="col-md-3"> 720 <div class="title">Support</div> 721 <ul class="liens"> 722 <li><a href="/tarifs-du-service-de-pointage-par-telephone#faq">Centre d'aide</a><li> 723 <li><a href="#" onclick="Chatra('openChat', true); return false;">Tchatter avec nous</a><li> 724 <li><a href="/demo-du-systeme-de-pointage">Démo gratuite</a><li> 725 <li><a href="#" data-bs-toggle="modal" data-bs-target="#modal_contact_us" class="hide_btn_before_init">Nous contacter</a><li> 726 <li><a href="#" data-bs-toggle="modal" data-bs-target="#modal_bug_report" class="hide_btn_before_init">Signaler un bug</a><li> 727 </ul> 728 </div> 729 <div class="col-md-3"> 730 <div class="title">Ressources</div> 731 <ul class="liens"> 732 <li><a href="/">Blog</a><li> 733 <li><a href="https://mytime-documentation.notion.site/">Guide pratique</a><li> 734 <li><a href="#" data-bs-toggle="modal" data-bs-target="#modal_get_commercial_documentation" class="hide_btn_before_init">Documentation commerciale</a><li> 735 </ul> 736 </div> 737 <div class="col-md-3"> 738 <div class="title">Clients</div> 739 <ul class="liens"> 740 <li><a href="/">Témoignages</a><li> 741 <li><a href="https://www.ekomi.fr/avis-clients-mytimefr.html">Avis clients</a><li> 742 </ul> 743 <div class="hreview-aggregate"> 744 <span class="fn" style="display: none">myTime</span> 745 <p class="mb-1"> 746 <span class="rating_img" data-note="4.8"></span> 747 <span class="rating"> 748 <span class="average">4.8</span>/<span class="best">5</span> 749 </span> 750 </p> 751 <p class="nb_avis_and_periode"> 752 (<span class="votes">40</span> avis sur les 12 derniers mois) <br> 753 </p> 754 </div> 755 </div> 756 </div> 757 <hr> 758 759 <div class="row"> 760 <div class="col-md-9 copyright">
761 Copyright © 2026 MYTIME. Tous droits réservés. 762 <br class="d-md-none"> 763 <a href="#" data-bs-toggle="modal" data-bs-target="#modal_contact_us">Contact</a> 764 <a href="/cgv">CGV</a> 765 <a href="/legal-notices">Mentions légales</a> 766 <a href="/data-policy">Protection des données</a> 767 768 <div style="display:none;"> 769 <div class="title">Contact</div> 770 <p> 771 <span class="phone-number">+33170813111</span><br> 772 [email protected] </p> 773 <p> 774 <a href="#" data-bs-toggle="modal" data-bs-target="#modal_get_demo" class="btn btn-light hide_btn_before_init">Planifier une démo</a> 775 </p> 776 <p> 777 <a href="#" data-bs-toggle="modal" data-bs-target="#modal_contact_us" class="hide_btn_before_init">Nous contacter</a> 778 </p> 779 </div> 780 </div> 781 <div class="col-md-3 social_networks"> 782 <a href="#"><i class="fab fa-twitter"></i></a> 783 <a href="https://www.linkedin.com/company/mytime---votre-pointeuse-virtuelle"><i class="fab fa-linkedin"></i></a> 784 <a href="https://www.instagram.com/mytime.fr/"><i class="fab fa-facebook"></i></a> 785 <a href="#" data-bs-toggle="modal" data-bs-target="#modal_contact_share"><i class="fas fa-share-alt"></i></a> 786 </div> 787 </div> 788 </div> 789 </div> 790 791 </footer> 792 793 794 <div id="bottom"></div> 795 796
797<script> 798</script>
798 799 800 801<fieldset class="modal_export_and_display period hide"> 802 <legend>Période</legend> 803 <div class="form-group"> 804 <div class="form-inline"> 805 Du <input type="date" name="start_date" class="form-control" value="" /> 806 au <input type="date" name="end_date" class="form-control" value="" /> 807 </div> 808 </div> 809</fieldset> 810<fieldset class="modal_export_and_display table_columns hide"> 811 <legend>Colonnes tableau</legend> 812 <div class="table_columns form-group"> 813 <div> 814 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Liste des colonnes à afficher dans le tableau."></i> <label>Colonnes affichées : </label> 815 <a href="#" class="check_all float-end">Sélectionner tout</a> 816 <ul class="table_columns_list sortable-list"></ul> 817 </div> 818 <li class="hide table_column_block_base item"> 819 <div class="item_content"> 820 <div class="form-check"> 821 <label class="form-check-label"><input type="checkbox" name="export_fields[]" value="" checked="checked" class="form-check-input" /></label> 822 </div> 823 </div> 824 <i class="fas fa-grip-lines dragging-icon hide"></i> 825 </li> 826 </div> 827</fieldset> 828<fieldset class="modal_export_and_display employee hide"> 829 <legend>Employés</legend> 830 <div class="row"> 831 <div class="col-md-6 form-group"> 832 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Format dâaffichage des employés. Choix possible : <ul class='mb-0'><li><code>Prénom Nom</code> : affichage du prénom avant le nom</li> <li><code>Nom Prénom</code> : affichage du prénom après le nom</li></ul>"></i> <label class="control-label">Format dâaffichage : </label> 833 <div class="form-check"> 834 <label class="form-check-label"><input type="radio" class="form-check-input" name="employee_display_type" value="first_and_last_name" />Prénom Nom</label> 835 </div> 836 <div class="form-check"> 837 <label class="form-check-label"><input type="radio" class="form-check-input" name="employee_display_type" value="last_and_first_name" />Nom Prénom</label> 838 </div> 839 </div> 840 </div> 841</fieldset> 842<fieldset class="modal_export_and_display date_time hide"> 843 <legend>Dates & Heures</legend> 844 <div class="row"> 845 <div class="col-md-6 form-group"> 846 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Format dâaffichage des dates. Choix possible : <ul class='mb-0'><li><code>Synthétique</code> : affichage sous la forme <em>jj/mm/aaaa</em> (exemple : 01/06/2000)</li> <li><code>En lettres</code> : affichage avec le jour de la semaine et le mois en lettre (exemple : Mardi 1er juin 2000)</li></ul>"></i> <label class="control-label">Format des dates : </label> 847 <div class="form-check"> 848 <label class="form-check-label"><input type="radio" class="form-check-input" name="date_display_type" value="synthetic" />Synthétique (jj/mm/aaaa)</label> 849 </div> 850 <div class="form-check"> 851 <label class="form-check-label"><input type="radio" class="form-check-input" name="date_display_type" value="in_letters" />En lettres</label> 852 </div> 853 </div> 854 <div class="col-md-6 form-group"> 855 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Format dâaffichage des heures. Choix possible : <ul class='mb-0'><li><code>Classique</code> : affichage sous la forme <em>hh:mm</em> (exemple : 09:30)</li> <li><code>Chronomètre</code> : affichage sous la forme <em>hh:mm:ss</em> (exemple : 09:30:00) </li></ul>"></i> <label>Format des heures : </label> 856 <div class="form-check"> 857 <label class="form-check-label"><input type="radio" class="form-check-input" name="time_display_type" value="string" />Classique</label> 858 </div> 859 <div class="form-check"> 860 <label class="form-check-label"><input type="radio" class="form-check-input" name="time_display_type" value="chrono" />Chronomètre</label> 861 </div> 862 </div> 863 </div> 864</fieldset> 865<fieldset class="modal_export_and_display duration hide"> 866 <legend>Durées</legend> 867 <div class="row"> 868 <div class="col-md-3 form-group"> 869 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Format dâaffichage des durées. Choix possible : <ul class='mb-0'><li><code>Classique</code> : affichage sous la forme <em>hh:mm.ss</em> (exemple : 02:15.00)</li> <li><code>En centième dâheure</code> : affichage en nombre dâheure décimale (exemple : 2,25H) </li> <li><code>En secondes</code> : affichage en nombre de secondes (exemple : 8100) </li></ul>"></i> <label>Format des durées :</label> 870 <div class="form-check"> 871 <label class="form-check-label"><input type="radio" class="form-check-input" name="duration_display_type" value="default" />Classique (avec secondes)</label> 872 </div> 873 <div class="form-check"> 874 <label class="form-check-label"><input type="radio" class="form-check-input" name="duration_display_type" value="default_no_seconds" />Classique (sans secondes)</label> 875 </div> 876 <div class="form-check"> 877 <label class="form-check-label"><input type="radio" class="form-check-input" name="duration_display_type" value="centieme" />En centième dâheure</label> 878 </div> 879 <div class="form-check"> 880 <label class="form-check-label"><input type="radio" class="form-check-input" name="duration_display_type" value="seconds" />En secondes</label> 881 </div> 882 </div> 883 <div class="col-md-6 form-group"> 884 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Choix pour arrondir les durées."></i> <label>Arrondissement des durées :</label><br> 885 <div class="form-inline"> 886 Arrondir 887 <select name="duration_round_precision" class="form-control"> 888 <option value="0">0</option> 889 <option value="1">1</option> 890 <option value="5">5</option> 891 <option value="10">10</option> 892 <option value="15">15</option> 893 </select> 894 minutes au 895 <select name="duration_round_mode" class="form-control"> 896 <option value="up">au dessus</option> 897 <option value="down">au dessous</option> 898 <option value="close">au plus près</option> 899 </select> 900 </div> 901 </div> 902 <div class="col-md-3 form-group"> 903 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Choix pour afficher les durées valant 0. Choix possible : <ul class='mb-0'><li><code>Durée à 0</code> : affichage normal (comme une durée quelconque)</li> <li><code>Champ vide</code>
903 : affichage dâun champ vide </li></ul>"></i> <label>Affichage des durées valant 0 :</label><br> 904 <div class="form-check-inline"> 905 <label class="form-check-label"><input type="radio" class="form-check-input" name="duration_blank_if_empty" value="0" /> Durée à 0</label> 906 </div> 907 <div class="form-check-inline"> 908 <label class="form-check-label"><input type="radio" class="form-check-input" name="duration_blank_if_empty" value="1" /> Champ vide</label> 909 </div> 910 </div> 911 </div> 912</fieldset> 913<fieldset class="modal_export_and_display location distance location_and_distance hide"> 914 <legend class="location hide">Lieux</legend> 915 <legend class="distance hide">Distances</legend> 916 <legend class="location_and_distance hide">Lieux & Distances</legend> 917 <div class="row"> 918 <div class="col-md-6 form-group location_field"> 919 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Format dâaffichage des positions géographiques. Choix possible : <ul class='mb-0'><li><code>Adresse postale</code> : affichage sous la forme dâune adresse postale (rue, code postal, ville) </li> <li><code>Coordonnées GPS</code> : affichage sous la forme de coordonnée GPS (latitude et longitude)</li></ul>"></i> <label>Format des positions géographiques : </label> 920 <div> 921 <div class="form-check form-check-inline"> 922 <label class="form-check-label"><input type="radio" class="form-check-input" name="location_display_type" value="ADDRESS" /> Adresse postale</label> 923 </div> 924 <div class="form-check form-check-inline"> 925 <label class="form-check-label"><input type="radio" class="form-check-input" name="location_display_type" value="COORDINATES" /> Coordonnées GPS</label> 926 </div> 927 </div> 928 </div> 929 <div class="col-md-3 form-group distance_field"> 930 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Choix pour afficher les distances valant 0. Choix possible : <ul class='mb-0'><li><code>Distance à 0</code> : affichage normal (comme une distance quelconque)</li> <li><code>Champ vide</code> : affichage dâun champ vide </li></ul>"></i> <label>Affichage des distances valant 0 :</label><br> 931 <div class="form-check-inline"> 932 <label class="form-check-label"><input type="radio" class="form-check-input" name="distance_blank_if_empty" value="0" /> Distance à 0</label> 933 </div> 934 <div class="form-check-inline"> 935 <label class="form-check-label"><input type="radio" class="form-check-input" name="distance_blank_if_empty" value="1" /> Champ vide</label> 936 </div> 937 </div> 938 </div> 939</fieldset> 940 941<div id="modal_filter_data" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 942 <div class="modal-dialog modal-lg"> 943 <div class="modal-content"> 944 <div class="modal-header"> 945 <h5 class="modal-title"> 946 <span class="title_select_displayed_columns">Critères / Filtres</span> 947 </h5> 948 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 949 </div> 950 <form action="#" method="post"> 951 <div class="modal-body"> 952 <div class="form_content"></div> 953 </div> 954 <div class="modal-footer"> 955 <button type="submit" name="valider" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Valider</button> 956 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 957 </div> 958 </form> 959 </div> 960 </div> 961</div> 962 963<div id="modal_export_and_display_params" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 964 <div class="modal-dialog modal-lg"> 965 <div class="modal-content"> 966 <div class="modal-header"> 967 <h5 class="modal-title"> 968 <span class="title_select_displayed_columns">Paramètres dâaffichage de la page</span> 969 <span class="title_export">Paramètres dâaffichage pour lâexport <span class="type_export"></span></span> 970 </h5> 971 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 972 </div> 973 <form action="#" method="post"> 974 <div class="modal-body"> 975 <div class="form_errors_content"></div> 976 <div class="center custom_filters_field hide"> 977 <div class="form-check form-check-inline"> 978 <label class="form-check-label"><input type="radio" class="form-check-input" name="custom_filters" value="
9780" /> Filtres actuels</label> 979 </div> 980 <div class="form-check form-check-inline"> 981 <label class="form-check-label"><input type="radio" class="form-check-input" name="custom_filters" value="1" /> Autres filtres</label> 982 </div> 983 </div> 984 <fieldset class="fieldset_filters_content hide"> 985 <legend>Filtres</legend> 986 <div class="filters_content"></div> 987 </fieldset> 988 <fieldset class="fieldset_format_csv hide"> 989 <legend>Type de CSV</legend> 990 <div class="center mb-2"> 991 <div class="form-check form-check-inline"> 992 <label class="form-check-label"><input type="radio" class="form-check-input" name="csv_type" value="standard" /> CSV classique</label> 993 </div> 994 <div class="form-check form-check-inline"> 995 <label class="form-check-label"><input type="radio" class="form-check-input" name="csv_type" value="excel" /> CSV pour Excel</label> 996 </div> 997 </div> 998 </fieldset> 999 <div class="plugins_content"></div> 1000 <fieldset class="export_file hide"> 1001 <legend>Fichier final</legend> 1002 <div class="row"> 1003 <div class="col-md-12 form-group"> 1004 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content=""></i> <label>Titre :</label><br> 1005 <input type="text" name="export_file_title" class="form-control" value="" /> 1006 <div class="form-text">Laisser vide pour le titre par défaut</div> 1007 </div> 1008 <div class="col-md-12 form-group"> 1009 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content=""></i> <label>Nom de fichier :</label><br> 1010 <div class="alert alert-warning hide pt-1 pb-1 mb-1"> 1011 <span class="warning_message_no_employee_variable hide">Veuillez ajouter le texte <code>{employee}</code> (variable nom employé) dans le nom de fichier pour que chaque nom de fichier soit distinct et présent dans le fichier ZIP.</span> 1012 <span class="warning_message_no_company_variable hide">Veuillez ajouter le texte <code>{company}</code> (variable nom société) dans le nom de fichier pour que chaque nom de fichier soit distinct et présent dans le fichier ZIP.</span> 1013 <span class="warning_message_no_task_variable hide">Veuillez ajouter le texte <code>{task}</code> (variable nom mission) dans le nom de fichier pour que chaque nom de fichier soit distinct et présent dans le fichier ZIP.</span> 1014 </div> 1015 <input type="text" name="export_file_name" class="form-control" value="" /> 1016 <div class="form-text">Laisser vide pour le nom de fichier par défaut</div> 1017 </div> 1018 1019 <div class="col-md-12 form-group exported_files hide"> 1020 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content=""></i> <label>Types de fichier à inclure dans lâarchive :</label><br> 1021 <div class=""> 1022 <div class="form-check form-check-inline"> 1023 <label class="form-check-label"><input type="checkbox" class="form-check-input" name="exported_file_types[]" value="csv" /> CSV</label> 1024 </div> 1025 <div class="form-check form-check-inline"> 1026 <label class="form-check-label"><input type="checkbox" class="form-check-input" name="exported_file_types[]" value="pdf" /> PDF</label> 1027 </div> 1028 </div> 1029 </div> 1030 1031 <div class="col-md-12 form-group export_email hide"> 1032 <i class="fas fa-info-circle" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Cocher oui pour recevoir lâexport automatiquement par email une fois généré."></i> <label>Envoi par email :</label><br> 1033 <div class="form-check form-check-inline"><label class="form-check-label"><input type="radio" class="form-check-input" name="export_send_email" value="0" />Non</label></div> 1034 <div class="form-check form-check-inline"><label class="form-check-label"><input type="radio" class="form-check-input" name="export_send_email" value="1" />Oui</label></div> 1035 <div class="hide export_email_params"> 1036 <div class="form-text">Adresse email :</div> 1037 <input type="email" name="email_to" class="form-control" autocomplete="email" inputmode="email" /> 1038 <div class="form-text"> 1039 Lâexport sera envoyé automatiquement à cette adresse une fois généré. 1040 </div> 1041 </div> 1042 </div> 1043 1044 </div> 1045 </fieldset> 1046 <div class="text-end save_choice"> 1047 <div class="form-check form-check form-check-inline"> 1048 <label class="form-check-label"><input type="checkbox" class="form-check-input" name="save_choice" value="1" checked="checked" /> Sauvegarder ces paramètres</label> 1049 </div> 1050 </div> 1051 </div> 1052 <div class="modal-footer"> 1053 <button type="submit" name="valider" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Valider</button> 1054 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 1055 </div> 1056 </form> 1057 </div> 1058 </div> 1059</div> 1060
1061<script> 1062 $(function() { 1063 if ($('.data_table_wrapper').length > 0) { 1064 CustomDataTable.initDisplayParams(); 1065 } 1066 1067 $('div#modal_filter_data').on('show.bs.modal', function (event) { 1068 // 13/12/2019 : bug car le glyphicon info signe déclenche un event show.bs.modal 1069 if (typeof event.relatedTarget == 'undefined') { 1070 return; 1071 } 1072 1073 let button = $(event.relatedTarget); 1074 const modal = Modal.init($(this)); 1075 1076 // 06/02/2023 : remplacé par button.closest('.data_table_wrapper'); car ne fonctionnait pas pour les table sans data-display_items mais avec filtres (comme l'onglet vue d'ensemble des droits d'acces par exemple) 1077 //let div = button.closest('[data-display_items][data-display_items!=""]'); 1078 let div = button.closest('.data_table_wrapper'); 1079 if (!button.data('filter_standalone') && div.length === 0) { 1080 return false; 1081 } 1082 1083 // Init du modal 1084 CustomDataTable.initFilterModal(div, button, modal); 1085 1086 let btnSubmit = FormHelper.buttonLoader(modal.find('form button[type="submit"]'), 'reset'); 1087 btnSubmit.off('click').click(function(e) { 1088 e.preventDefault(); 1089 FormHelper.buttonLoader($(this), 'loading'); 1090 1091 if (!CustomDataTable.submitFilterModal(div, button, modal)) { 1092 // Réactivation du bouton car il y a des erreurs 1093 FormHelper.buttonLoader($(this), 'reset'); 1094 } 1095 else { 1096 // Retrait du modal 1097 modal.modal('hide'); 1098 } 1099 1100 return false; 1101 }); 1102 }); 1103 1104 $('div#modal_export_and_display_params').on('show.bs.modal', function (event) { 1105 // 13/12/2019 : bug car le glyphicon info signe déclenche un event show.bs.modal 1106 if (typeof event.relatedTarget == 'undefined') { 1107 return; 1108 } 1109 1110 let button = $(event.relatedTarget); 1111 const modal = Modal.init($(this)); 1112 1113 //let div = button.closest('[data-display_items][data-display_items!=""]'); 1114 let div = button.closest('.data_table_wrapper'); 1115 if (div.length === 0) { 1116 return false; 1117 } 1118 1119 // Init du modal 1120 CustomDataTable.initDisplayOrExportModal(div, button, modal); 1121 1122 let btnSubmit = FormHelper.buttonLoader(modal.find('form button[type="submit"]'), 'reset'); 1123 btnSubmit.off('click').click(function(e) { 1124 e.preventDefault(); 1125 FormHelper.buttonLoader($(this), 'loading'); 1126 1127 if (!CustomDataTable.submitDisplayOrExportModal(div, button, modal)) { 1128 // Réactivation du bouton car il y a des erreurs 1129 FormHelper.buttonLoader($(this), 'reset'); 1130 } 1131 else { 1132 // Retrait du modal 1133 modal.modal('hide'); 1134 } 1135 1136 return false; 1137 }); 1138 1139 }); 1140 }); 1141</script>
1141 1142 <div id="modal_contact_us" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1143 <div class="modal-dialog modal-xl"> 1144 <div class="modal-content"> 1145 <div class="modal-header"> 1146 <h5 class="modal-title">Nous contacter</h5> 1147 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1148 </div> 1149 <div class="modal-body"> 1150 <div class="row"> 1151 <div class="col-md-6"> 1152 <div class="card"> 1153 <div class="card-body"> 1154 <h5 class="card-title">Contact immédiat par téléphone</h5> 1155 <div class="alert alert-info"> 1156 Indiquez votre numéro de téléphone et validez, vous recevrez dans quelques secondes un appel vous mettant en relation directe avec notre service client.<br/> 1157 Le coût de la communication est entièrement à notre charge. 1158 </div> 1159 1160 <form method="post" action="#" class="contact_by_phone"> 1161 <input type="hidden" name="landing_page" value="" /> 1162 <input type="hidden" name="url_referer" value="" /> 1163 <input type="hidden" name="user_agent" value="" /> 1164 <input type="hidden" name="accept_language" value="" /> 1165 <input type="hidden" name="ip_address" value="" /> 1166 1167 <div class="form-group"> 1168 <label for="contact_by_phone_email">Adresse email :</label> 1169 <input type="text" id="contact_by_phone_email" name="email" class="form-control" size="40" /> 1170 </div> 1171 <div class="form-group"> 1172 <label for="contact_by_phone_phone_number">Numéro de téléphone :</label><br> 1173 <input type="text" id="contact_by_phone_phone_number" name="phone_number" class="form-control" size="15" /> 1174 </div> 1175 <div class="form-group"> 1176 <div id="contact_by_phone_grecaptcha" class="grecaptcha"></div> 1177 </div> 1178 <div class="center"> 1179 <button type="submit" class="btn btn-primary" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" id="contact_us_phone_button">Ãtre rappelé par téléphone</button> 1180 </div> 1181 </form> 1182 </div> 1183 </div> 1184 1185 <table class="coordonnees mt-3"> 1186 <tr> 1187 <td> 1188 <img loading="lazy" src="/images/icons/icon_location.png" class="icon float-end" alt=""> 1189 </td> 1190 <td> 1191 MYTIME SAS<br/> 1192 22 Rue Henri-Théodore Pigozzi<br/>78300 Poissy<br/>France </td> 1193 </tr> 1194 <tr> 1195 <td> 1196 <img loading="lazy" src="/images/icons/icon_phone.png" class="icon float-end" alt=""> 1197 </td> 1198 <td> 1199 <span class="phone-number">+33170813111</span> 1200 </td> 1201 </tr> 1202 <tr> 1203 <td> 1204 <img loading="lazy" src="/images/icons/icon_message.png" class="icon float-end" alt=""> 1205 </td> 1206 <td> 1207 [email protected] </td> 1208 </tr> 1209 </table> 1210 </div> 1211 1212 <div class="col-md-6"> 1213 <div class="card"> 1214 <div class="card-body"> 1215 <h5 class="card-title">Contact par email</h5> 1216 1217 <form action="#" method="post" class="contact_by_email"> 1218 <div class="alert alert-info"> 1219 Vous pouvez nous contacter en remplissant ce formulaire. Nous vous répondrons dans les plus brefs délais. 1220 </div> 1221 <div class="form-group"> 1222 <label for="contact_by_email_company_name">Société : </label> 1223 <input type="text" id="contact_by_email_company_name" name="company_name" class="form-control" value="" /> 1224 </div> 1225 <div class="row"> 1226 <div class="col-md-2"> 1227 <div class="form-group"> 1228 <label for="contact_by_email_title">Civilité :</label> 1229 <select id="contact_by_email_title" name="gender" class="form-control"> 1230 <option value="0">-</option> 1231 <option value="1">M.</option> 1232 <option value="2">Mme</option> 1233 </select> 1234 </div> 1235 </div> 1236 <div class="col-md-5"> 1237 <div class="form-group"> 1238 <label for="contact_by_email_first_name">Prénom : </label> 1239 <input type="text" id="contact_by_email_first_name" name="first_name" class="form-control" value="" /> 1240 </div> 1241 </div> 1242 <div class="col-md-5"> 1243 <div class="form-group"> 1244 <label for="contact_by_email_last_name">Nom : </label> 1245 <input type="text" id="contact_by_email_last_name" name="last_name" class="form-control" value="" /> 1246 </div> 1247 </div> 1248 </div> 1249 <div class="row"> 1250 <div class="col-md-6"> 1251 <div class="form-group"> 1252 <label for="contact_by_email_email">Adresse email : </label> 1253 <input type="text" id="contact_by_email_email" name="email" size="40" class="form-control" value="" /> 1254 </div> 1255 </div> 1256 <div class="col-md-6"> 1257 <div class="form-group"> 1258 <label for="contact_by_email_phone_number">Téléphone : </label> 1259 <input type="text" id="contact_by_email_phone_number" name="phone_number" class="form-control" value="" /> 1260 </div> 1261 </div> 1262 </div> 1263 <div class="form-group"> 1264 <label for="contact_by_email_street">Adresse : </label> 1265 <input type="text" id="contact_by_email_street" name="street" class="form-control" value="" placeholder="Rue" /> 1266 </div> 1267 <div class="row"> 1268 <div class="col-md-3"> 1269 <div class="form-group"> 1270 <input type="text" id="contact_by_email_zip_code" name="post_code" size="5" class="form-control" value="" placeholder="Code postal" /> 1271 </div> 1272 </div> 1273 <div class="col-md-5"> 1274 <div class="form-group"> 1275 <input type="text" id="contact_by_email_city" name="city" class="form-control" value="" placeholder="Ville" /> 1276 </div> 1277 </div> 1278 <div class="col-md-4"> 1279 <div class="form-group"> 1280 <select id="contact_by_email_country" name="country" class="form-control"></select> 1281 </div> 1282 </div> 1283 </div> 1284 <div class="form-group"> 1285 <label for="contact_by_email_message">Message ou commentaires : </label> 1286 <textarea id="contact_by_email_message" name="message" cols="40" rows="7" class="form-control"></textarea> 1287 </div> 1288 <div class="form-group"> 1289 <div id="contact_by_email_grecaptcha" class="grecaptcha"></div> 1290 </div> 1291 <div class="center"> 1292 <button type="submit" class="btn btn-primary" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" id="contact_us_email_button">Envoyer</button> 1293 </div> 1294 <div class="form-text mt-3">Conformément à la loi Informatique et Libertés n°78-17 en date du 6 janvier 1978, modifiée par la loi n°2004-801 du 6 août 2004, vous disposez dâun droit dâaccès, de rectification, de modification et de suppression des données qui vous concernent.</div> 1295 </form> 1296 </div> 1297 </div> 1298 </div> 1299 </div> 1300 </div> 1301 <div class="modal-footer"> 1302 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 1303 </div> 1304 </div> 1305 </div> 1306</div> 1307
1308<script> 1309 $('div#modal_contact_us').on('show.bs.modal', function (event) { 1310 let button = $(event.relatedTarget); 1311 const modal = Modal.init($(this)); 1312 1313 1314 // ---------- Form contact par téléphone ---------- 1315 1316 let contactByPhoneForm = FormHelper.init(modal.find('form.contact_by_phone'), (form, btnSubmit) => { 1317 contactByPhoneForm.find('input[name="phone_number"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(contactByPhonePhoneNumberFieldIti)); 1318 1319 HTTPClient.request('POST', URL_API+'/contact/by-phone', FormHelper.getFormData(form), 1320 () => { 1321 const email = Email.normalize(form.find('input[name="email"]').val()); 1322 const phoneNumber = form.find('input[name="phone_number"]').val(); 1323 Appvizer.conversion('AP-27154'); 1324 // Conversion Google Ads "Contact callback" déclenchée explicitement ici plutôt que par un trigger GTM basé sur la visibilité d'un élément du DOM (peu fiable, l'élément étant créé puis retiré 6 secondes après par FlashMessage) 1325 dataLayer.push({'event': 'contact_by_phone', 'enhanced_conversion_data': {'email': email, 'phone_number': phoneNumber}}); 1326 FlashMessage.displaySuccess("Vous allez être mis en relation avec notre hotline.", false, modal); 1327 }, 1328 (response) => Api.displayError(response, modal), 1329 (json) => { 1330 if (contactByPhoneCaptchaEnabled) { 1331 GoogleRecaptcha.reset('contact_by_phone_grecaptcha'); 1332 } 1333 FormHelper.displayFormErrors(form, btnSubmit, json); 1334 }, 1335 ); 1336 }); 1337 1338 contactByPhoneForm.find('input[name="landing_page"]').val('www.mytime.fr/presentation-de-la-solution-de-pointeuse-virtuelle'); 1339 contactByPhoneForm.find('input[name="url_referer"]').val(''); 1340 contactByPhoneForm.find('input[name="user_agent"]').val('Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PageSourceSearchBot/1.0; +https://pagesourcesearch.com/bot) Chrome/128.0.0.0 Safari/537.36'); 1341 contactByPhoneForm.find('input[name="accept_language"]').val('en-US,en;q=0.9'); 1342 contactByPhoneForm.find('input[name="ip_address"]').val('81.16.3.32'); 1343 1344 // Phone number 1345 let contactByPhonePhoneNumberFieldIti = TelephoneNumber.setIntlTelInput(contactByPhoneForm.find('input[name="phone_number"]')); 1346 1347 // Captcha 1348 let contactByPhoneCaptchaEnabled = contactByPhoneForm.find('#contact_by_phone_grecaptcha').length; 1349 if (contactByPhoneCaptchaEnabled) { 1350 GoogleRecaptcha.reset('contact_by_phone_grecaptcha'); 1351 } 1352 1353 // ---------- Form contact par email ---------- 1354 1355 let contactByEmailForm = FormHelper.init(modal.find('form.contact_by_email'), (form, btnSubmit) => { 1356 contactByEmailForm.find('input[name="phone_number"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(contactByEmailPhoneNumberFieldIti)); 1357 1358 HTTPClient.request('POST', URL_API+'/contact/by-email', FormHelper.getFormData(form), 1359 () => { 1360 const email = Email.normalize(form.find('input[name="email"]').val()); 1361 const phoneNumber = form.find('input[name="phone_number"]').val(); 1362 Appvizer.conversion('AP-27154'); 1363 // Conversion Google Ads "Contact email" déclenchée explicitement ici plutôt que par un trigger GTM basé sur la visibilité d'un élément du DOM (peu fiable, l'élément étant créé puis retiré 6 secondes après par FlashMessage) 1364 dataLayer.push({'event': 'contact_by_email', 'enhanced_conversion_data': {'email': email, 'phone_number': phoneNumber, 'first_name': form.find('input[name="first_name"]').val(), 'last_name': form.find('input[name="last_name"]').val()}}); 1365 FlashMessage.displaySuccess("Votre message a été envoyé avec succès !<br/>Nous nous efforcerons de vous répondre dans les plus brefs délais.", false, modal); 1366 }, 1367 (response) => Api.displayError(response, modal), 1368 (json) => { 1369 if (contactByEmailCaptchaEnabled) { 1370 GoogleRecaptcha.reset('contact_by_email_grecaptcha'); 1371 } 1372 FormHelper.displayFormErrors(form, btnSubmit, json); 1373 }, 1374 ); 1375 }); 1376 1377 contactByEmailForm.find('[name="gender"]').val('0'); 1378 1379 // Phone number 1380 let contactByEmailPhoneNumberFieldIti = TelephoneNumber.setIntlTelInput(contactByEmailForm.find('input[name="phone_number"]')); 1381 1382 // Pays 1383 Country.fillSelectWithFlags(contactByEmailForm.find('select[name="country"]'), 'FR'); 1384 1385 // Captcha 1386 let contactByEmailCaptchaEnabled = contactByEmailForm.find('#contact_by_email_grecaptcha').length; 1387 if (contactByEmailCaptchaEnabled) { 1388 GoogleRecaptcha.reset('contact_by_email_grecaptcha'); 1389 } 1390 }); 1391</script>
1391 1392 1393<div id="modal_about_us" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1394 <div class="modal-dialog modal-lg"> 1395 <div class="modal-content"> 1396 <div class="modal-header"> 1397 <h5 class="modal-title">à propos</h5> 1398 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1399 </div> 1400 <div class="modal-body"> 1401 <div class="mb-1"> 1402 <img loading="lazy" src="/images/logo/mytime.png" alt="" title="myTime" class="logo" /> 1403 <span class="police_mytime">myTime</span> 1404 </div> 1405 <p> 1406 myTime v. <a href="#" data-bs-toggle="modal" data-bs-target="#modal_versions"><span class="current_version"></span></a> 1407 </p> 1408 <p> 1409 Téléphone : <span class="phone-number">+33170813111</span><br> 1410 Adresse email : [email protected] </p> 1411 <p>myTime est un service de la société :</p> 1412 <p> 1413 MYTIME SAS<br> 1414 22 Rue Henri-Théodore Pigozzi<br>78300 Poissy<br>France </p> 1415 <div class="copyright"> 1416 Copyright © 2026 MYTIME. Tous droits réservés. 1417 </div> 1418 </div> 1419 <div class="modal-footer"> 1420 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 1421 </div> 1422 </div> 1423 </div> 1424</div>
1425<script> 1426 $('div#modal_about_us').on('show.bs.modal', function (event) { 1427 let button = $(event.relatedTarget); 1428 const modal = Modal.init($(this)); 1429 1430 modal.find('span.current_version').text(CURRENT_VERSION); 1431 }); 1432</script>
1432 1433 1434<div id="modal_bug_report" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1435 <div class="modal-dialog modal-lg "> 1436 <div class="modal-content"> 1437 <div class="modal-header"> 1438 <h5 class="modal-title"><i class="fas fa-bug me-2 text-danger"></i> Signaler un bug</h5> 1439 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1440 </div> 1441 <form method="post" action="#"> 1442 <div class="modal-body"> 1443 <div class="alert alert-info"> 1444 Merci de préciser autant dâinformations que possible pour nous aider à reproduire et corriger le problème. Il sera vérifié et résolu dans les meilleurs délais. 1445 </div> 1446 <div class="form_errors_content"></div> 1447 1448 <div class="row"> 1449 <div class="col-md-8 form-group"> 1450 <label for="bug_report_summary" class="form-label">Titre du bug <span class="text-danger">*</span></label> 1451 <input type="text" id="bug_report_summary" name="summary" class="form-control" required maxlength="120" placeholder="Résumé court (ex: Erreur 500 lors de lâenregistrement)"> 1452 </div> 1453 1454 <div class="col-md-4 form-group"> 1455 <label for="bug_report_severity" class="form-label">Sévérité <span class="text-danger">*</span></label> 1456 <select id="bug_report_severity" name="severity" class="form-select" required> 1457 <option value="">Sélectionner...</option> 1458 <option value="critical">Critique â bloque lâutilisation</option> 1459 <option value="high">Haute â fonctionnalité indisponible</option> 1460 <option value="medium">Moyenne â gêne importante</option> 1461 <option value="low">Faible â amélioration souhaitée</option> 1462 </select> 1463 </div> 1464 1465 <div class="col-12 form-group"> 1466 <label for="bug_report_description" class="form-label">Description détaillée <span class="text-danger">*</span></label> 1467 <textarea id="bug_report_description" name="description" class="form-control" rows="4" required placeholder="Décrivez ce qui se passe, ce que vous attendiez, et tout message dâerreur affiché."></textarea> 1468 </div> 1469 1470 <div class="col-md-6 form-group"> 1471 <label for="bug_report_steps" class="form-label">Ãtapes pour reproduire</label> 1472 <textarea id="bug_report_steps" name="steps" class="form-control" rows="3" placeholder="1) Aller à ... 2) Cliquer sur ..."></textarea> 1473 </div> 1474 1475 <div class="col-md-6 form-group"> 1476 <label for="bug_report_expected" class="form-label">Résultat attendu</label> 1477 <textarea id="bug_report_expected" name="expected" class="form-control" rows="3" placeholder="Que devrait-il se passer ?"></textarea> 1478 </div> 1479 1480 <div class="col-md-4 form-group"> 1481 <label for="bug_report_component" class="form-label">Composant / Module</label> 1482 <input id="bug_report_component" name="component" class="form-control" placeholder="Ex: Pointage, Planning, Authentification"> 1483 </div> 1484 1485 <div class="col-md-4 form-group"> 1486 <label for="bug_report_priority" class="form-label">Priorité</label> 1487 <select id="bug_report_priority" name="priority" class="form-select"> 1488 <option value="normal">Normal</option> 1489 <option value="urgent">Urgent</option> 1490 <option value="low">Bas</option> 1491 </select> 1492 </div> 1493 1494 <div class="col-md-4 form-group"> 1495 <label class="form-label d-block">OS / Navigateur</label> 1496 <div class="small text-muted" id="bug_report_env_info">Détecte automatiquement...</div> 1497 </div> 1498 1499 <!-- File upload area --> 1500 <div class="col-12 form-group"> 1501 <label class="form-label">Capture dâécran / Fichiers (images, logs)</label> 1502 <input id="bug_report_files_input" type="file" multiple accept="image/*,.log,.txt,.zip" class="hide"> 1503 <div class="form-text text-muted mt-1">Formats acceptés : jpg, png, gif, txt, log, zip. Max 5 fichiers. Taille max : 8MB / fichier.</div> 1504 </div> 1505 1506 <div class="user_identity"> 1507 <div class="col-md-4 form-group"> 1508 <label for="bug_report_identity" class="form-label">Votre nom</label> 1509 <input id="bug_report_identity" name="identity" class="form-control" placeholder="Nom (optionnel)"> 1510 </div> 1511 <div class="col-md-4 form-group"> 1512 <label for="bug_report_email" class="form-label">Votre adresse email</label> 1513 <input id="bug_report_email" name="email" type="email" class="form-control" placeholder="[email protected]"> 1514 </div> 1515 <div class="col-md-4 form-group"> 1516 <label for="bug_report_phone_number" class="form-label">Votre numéro de téléphone</label> 1517 <input id="bug_report_phone_number" name="phone_number" class="form-control" placeholder="[email protected]"> 1518 </div> 1519 </div> 1520 </div> 1521 <div class="form-group"> 1522 <div id="bug_report_grecaptcha" class="grecaptcha"></div> 1523 </div> 1524 <input type="hidden" name="url" value="" /> 1525 <input type="hidden" name="user_agent" value="" /> 1526 </div> 1527 <div class="modal-footer"> 1528 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦"><i class="fas fa-paper-plane me-1"></i> Envoyer</button> 1529 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 1530 </div> 1531 </form> 1532 </div> 1533 </div> 1534</div>
1535<script> 1536 $('div#modal_bug_report').on('show.bs.modal', function (event) { 1537 let button = $(event.relatedTarget); 1538 const modal = Modal.init($(this)); 1539 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 1540 let formData = FormHelper.getFormData(form); 1541 formData.append('user_type', User.getUserType()); 1542 formData.append('user_id', User.getUserId()); 1543 files.forEach((f, i) => formData.append('attachments[]', f, f.name)); 1544 HTTPClient.request('POST', URL_API+'/contact/report-bug', formData, 1545 () => FlashMessage.displaySuccess("Le bug a bien été signalé, il sera vérifié et résolu dans les meilleurs délais.", false, modal), 1546 (response) => Api.displayError(response, modal), 1547 (json) => { 1548 if (captchaEnabled) { 1549 GoogleRecaptcha.reset('bug_report_grecaptcha'); 1550 } 1551 FormHelper.displayFormErrors(form, btnSubmit, json); 1552 }, 1553 ); 1554 }); 1555 1556 const MAX_SIZE = 8 * 1024 * 1024; // 8MB 1557 1558 // Identité utilisateur 1559 form.find('.user_identity').addClass('hide'); 1560 if (!User.isLogged()) { 1561 form.find('.user_identity').removeClass('hide'); 1562 } 1563 1564 // Environnement infos 1565 const userAgent = navigator.userAgent || ''; 1566 modal.find('#bug_report_env_info').text(UserAgent.getInfosDisplay(UserAgent.getData(userAgent))); 1567 form.find('input[name="url"]').val(document.location.href); 1568 form.find('input[name="user_agent"]').val(userAgent); 1569 1570 form.find('select[name="severity"]').val('medium'); 1571 form.find('select[name="priority"]').val('normal'); 1572 1573 // Gestion multi fichiers 1574 let files = []; 1575 MultiFilesInput.init(modal.find('#bug_report_files_input'), (newFilesList) => files = newFilesList, 5, MAX_SIZE); 1576 1577 // Captcha 1578 let captchaEnabled = $('#bug_report_grecaptcha').length; 1579 if (captchaEnabled) { 1580 GoogleRecaptcha.reset('bug_report_grecaptcha'); 1581 } 1582 }); 1583</script>
1583 1584 1585<div id="modal_contact_share" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1586 <div class="modal-dialog"> 1587 <div class="modal-content"> 1588 <div class="modal-header"> 1589 <h5 class="modal-title">Partager la solution de pointeuse virtuelle myTime</h5> 1590 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1591 </div> 1592 <form method="post" action="#" class="form-horizontal"> 1593 <div class="modal-body"> 1594 <div class="alert alert-info"> 1595 Un email contenant les informations et les avantages de la solution de pointeuse virtuelle myTime sera envoyé aux adresses email indiquées. 1596 </div> 1597 <div class="form-group"> 1598 <label for="contact_share_sender_email">Votre adresse email :</label> 1599 <input type="text" id="contact_share_sender_email" name="sender_email" class="form-control" value="" /> 1600 </div> 1601 <div class="form-group"> 1602 <label for="contact_share_email_1">Adresses email des destinataires :</label> 1603 <input type="text" id="contact_share_email_1" name="emails[]" placeholder="Adresses email n°1" class="form-control mb-2" /> 1604 <input type="text" id="contact_share_email_2" name="emails[]" placeholder="Adresses email n°2" class="form-control mb-2" /> 1605 <input type="text" id="contact_share_email_3" name="emails[]" placeholder="Adresses email n°3" class="form-control mb-2" /> 1606 <input type="text" id="contact_share_email_4" name="emails[]" placeholder="Adresses email n°4" class="form-control mb-2" /> 1607 <input type="text" id="contact_share_email_5" name="emails[]" placeholder="Adresses email n°5" class="form-control mb-2" /> 1608 </div> 1609 <div class="form-group2"> 1610 <div id="contact_share_grecaptcha" class="grecaptcha"></div> 1611 </div> 1612 </div> 1613 <div class="modal-footer"> 1614 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Envoyer</button> 1615 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 1616 </div> 1617 </form> 1618 </div> 1619 </div> 1620</div>
1621<script> 1622 $('div#modal_contact_share').on('show.bs.modal', function (event) { 1623 let button = $(event.relatedTarget); 1624 const modal = Modal.init($(this)); 1625 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 1626 HTTPClient.request('POST', URL_API+'/contact/share', FormHelper.getFormData(form), 1627 () => FlashMessage.displaySuccess("Les emails ont bien été envoyés. Merci pour votre confiance !", false, modal), 1628 (response) => Api.displayError(response, modal), 1629 (json) => { 1630 if (captchaEnabled) { 1631 GoogleRecaptcha.reset('contact_share_grecaptcha'); 1632 } 1633 FormHelper.displayFormErrors(form, btnSubmit, json); 1634 }, 1635 ); 1636 }); 1637 1638 // Captcha 1639 let captchaEnabled = $('#contact_share_grecaptcha').length; 1640 if (captchaEnabled) { 1641 GoogleRecaptcha.reset('contact_share_grecaptcha'); 1642 } 1643 }); 1644</script>
1644 1645 1646<div id="modal_contact_demo_flashcode" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1647 <div class="modal-dialog"> 1648 <div class="modal-content"> 1649 <div class="modal-header"> 1650 <h5 class="modal-title">Flashcode de démo</h5> 1651 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1652 </div> 1653 <form method="post" action="#" class="form-horizontal"> 1654 <div class="modal-body text-center"> 1655 <img src="/images/type_pointage/qrcode_demo.svg" alt="QR code" class="img-thumbnail"> 1656 </div> 1657 <div class="modal-footer"> 1658 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 1659 </div> 1660 </form> 1661 </div> 1662 </div> 1663</div>
1664<script> 1665 $('div#modal_contact_demo_flashcode').on('show.bs.modal', function (event) { 1666 const modal = Modal.init($(this)); 1667 1668 }); 1669</script>
1669 1670 1671 1672 1673<div id="modal_versions" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1674 <div class="modal-dialog modal-xl"> 1675 <div class="modal-content"> 1676 <div class="modal-header"> 1677 <h5 class="modal-title">Versions</h5> 1678 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1679 </div> 1680 <div class="modal-body"> 1681 <ul class="nav nav-tabs"> 1682 <li><a class="nav-link active" href="#web" aria-controls="web" data-bs-toggle="tab">Web</a></li> 1683 <li><a class="nav-link " href="#android" aria-controls="android" data-bs-toggle="tab">Android</a></li> 1684 <li><a class="nav-link " href="#ios" aria-controls="ios" data-bs-toggle="tab">iOS</a></li> 1685 </ul> 1686 1687 <div class="tab-content"> 1688 <div role="tabpanel" class="tab-pane active" id="web"> 1689 <div class="web_versions_dev hide"> 1690 <h3>Version en développement</h3> 1691 <ul></ul> 1692 </div> 1693 1694 <div class="web_versions_test hide"> 1695 <h3>Version en test (prévue le <span class="version_date"></span>)</h3> 1696 <ul></ul> 1697 <p>Pour tester cette version : <a href="https://beta.mytime.fr">https://beta.mytime.fr</a></p> 1698 </div> 1699 1700 <div class="web_versions_online"> 1701 <div class="version_base hide"> 1702 <h3>Version du <span class="version_name"></span></h3> 1703 <ul></ul> 1704 </div> 1705 </div> 1706 </div> 1707 1708 <div role="tabpanel" class="tab-pane" id="android"> 1709 <div class="android_versions_dev hide"> 1710 <h3>Version en développement</h3> 1711 <ul></ul> 1712 </div> 1713 1714 <div class="android_versions_test hide"> 1715 <h3>Version en test (prévue le <span class="version_date"></span>)</h3> 1716 <ul></ul> 1717 </div> 1718 1719 <div class="android_versions_online"> 1720 <div class="version_base hide"> 1721 <h3>Version <span class="version_name"></span></h3> 1722 <ul></ul> 1723 </div> 1724 </div> 1725 </div> 1726 1727 <div role="tabpanel" class="tab-pane" id="ios"> 1728 <div class="ios_versions_dev hide"> 1729 <h3>Version en développement</h3> 1730 <ul></ul> 1731 </div> 1732 1733 <div class="ios_versions_test hide"> 1734 <h3>Version en test (prévue le <span class="version_date"></span>)</h3> 1735 <ul></ul> 1736 </div> 1737 1738 <div class="ios_versions_online"> 1739 <div class="version_base hide"> 1740 <h3>Version <span class="version_name"></span></h3> 1741 <ul></ul> 1742 </div> 1743 </div> 1744 </div> 1745 </div> 1746 </div> 1747 <div class="modal-footer"> 1748 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 1749 </div> 1750 </div> 1751 </div> 1752</div>
1753<script> 1754 $('div#modal_versions').on('show.bs.modal', function (event) { 1755 HTTPClient.request('GET', URL_API+'/service/versions', null, 1756 (data) => { 1757 console.log(data); 1758 1759 function displayAvancement(avancement) { 1760 //if (avancement === 'test') { 1761 // return '<div class="progress" style="width: 10%; float: left;"><div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;">Terminé, test en cours</div></div>'; 1762 //} 1763 // if ($avancement == '0') { 1764 // return '<div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">Développement planifié</div></div>'; 1765 // } 1766 return '<div class="progress" style="width: 15%; float: left; margin-right: 10px; height: 1.3rem"><div class="progress-bar" role="progressbar" aria-valuenow="'+(avancement==='test' ?100:avancement)+'" aria-valuemin="0" aria-valuemax="100" style="width: '+(avancement==='test' ?100:avancement)+'%; min-width: 2em; ">'+(avancement==='test' ?'Terminé, test en cours':avancement)+'%</div></div>'; 1767 } 1768 1769 // Web 1770 let divWebVersionsOnline = $('div.web_versions_online'); 1771 divWebVersionsOnline.find('div:not(.version_base)').remove(); 1772 Object.entries(data['web']['online']).forEach(function([versionName, features]) { 1773 let div = divWebVersionsOnline.find('.version_base').clone().removeClass('version_base').removeClass('hide'); 1774 div.find('.version_name').text(versionName); 1775 features.forEach(feature => div.find('ul').append('<li>'+feature+'</li>')); 1776 divWebVersionsOnline.append(div); 1777 }); 1778 1779 if (data['web']['test']) { 1780 let divWebVersionsTest = $('div.web_versions_test').removeClass('hide'); 1781 Object.entries(data['web']['test']).forEach(function([versionName, features]) { 1782 divWebVersionsTest.find('.version_date').text(versionName); 1783 divWebVersionsTest.find('ul').empty(); 1784 features.forEach(feature => divWebVersionsTest.find('ul').append('<li>'+feature+'</li>')); 1785 }); 1786 } 1787 if (data['web']['dev']) { 1788 let divWebVersionsDev = $('div.web_versions_dev').removeClass('hide'); 1789 Object.entries(data['web']['dev']).forEach(function([versionName, features]) { 1790 divWebVersionsDev.find('.version_date').text(versionName); 1791 divWebVersionsDev.find('ul').empty(); 1792 features.forEach(([feature, avancement]) => divWebVersionsDev.find('ul').append('<li>'+displayAvancement(avancement)+' '+feature+'</li>')); 1793 }); 1794 } 1795 1796 // Android 1797 let divAndroidVersionsOnline = $('div.android_versions_online'); 1798 divAndroidVersionsOnline.find('div:not(.version_base)').remove(); 1799 Object.entries(data['android']['online']).forEach(function([versionName, [versionDate, features]]) { 1800 let div = divAndroidVersionsOnline.find('.version_base').clone().removeClass('version_base').removeClass('hide'); 1801 div.find('.version_name').text(versionName); 1802 features.forEach(feature => div.find('ul').append('<li>'+feature+'</li>')); 1803 divAndroidVersionsOnline.append(div); 1804 }); 1805 1806 if (data['android']['test']) { 1807 let divAndroidVersionsTest = $('div.android_versions_test').removeClass('hide'); 1808 Object.entries(data['android']['test']).forEach(function([versionName, [versionDate, features]]) { 1809 divAndroidVersionsTest.find('.version_date').text(versionName); 1810 divAndroidVersionsTest.find('ul').empty(); 1811 features.forEach(feature => divAndroidVersionsTest.find('ul').append('<li>'+feature+'</li>')); 1812 }); 1813 } 1814 if (data['android']['dev']) { 1815 let divAndroidVersionsDev = $('div.android_versions_dev').removeClass('hide'); 1816 Object.entries(data['android']['dev']).forEach(function([versionName, [versionDate, features]]) { 1817 divAndroidVersionsDev.find('.version_date').text(versionName); 1818 divAndroidVersionsDev.find('ul').empty(); 1819 features.forEach(([feature, avancement]) => divAndroidVersionsDev.find('ul').append('<li>'+displayAvancement(avancement)+' '+feature+'</li>')); 1820 });
1821 } 1822 1823 // iOS 1824 let divIosVersionsOnline = $('div.ios_versions_online'); 1825 divIosVersionsOnline.find('div:not(.version_base)').remove(); 1826 Object.entries(data['ios']['online']).forEach(function([versionName, [versionDate, features]]) { 1827 let div = divIosVersionsOnline.find('.version_base').clone().removeClass('version_base').removeClass('hide'); 1828 div.find('.version_name').text(versionName); 1829 features.forEach(feature => div.find('ul').append('<li>'+feature+'</li>')); 1830 divIosVersionsOnline.append(div); 1831 }); 1832 1833 if (data['ios']['test']) { 1834 let divIosVersionsTest = $('div.ios_versions_test').removeClass('hide'); 1835 Object.entries(data['ios']['test']).forEach(function([versionName, [versionDate, features]]) { 1836 divIosVersionsTest.find('.version_date').text(versionName); 1837 divIosVersionsTest.find('ul').empty(); 1838 features.forEach(feature => divIosVersionsTest.find('ul').append('<li>'+feature+'</li>')); 1839 }); 1840 } 1841 if (data['ios']['dev']) { 1842 let divIosVersionsDev = $('div.ios_versions_dev').removeClass('hide');
1843 Object.entries(data['ios']['dev']).forEach(function([versionName, [versionDate, features]]) { 1844 divIosVersionsDev.find('.version_date').text(versionName); 1845 divIosVersionsDev.find('ul').empty(); 1846 features.forEach(([feature, avancement]) => divIosVersionsDev.find('ul').append('<li>'+displayAvancement(avancement)+' '+feature+'</li>')); 1847 }); 1848 } 1849 1850 } 1851 ); 1852 }); 1853</script>
1853 1854 1855<div id="modal_user_login" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1856 <div class="modal-dialog"> 1857 <div class="modal-content"> 1858 <div class="modal-header"> 1859 <!--<h5 class="modal-title">Se connecter</h5>--> 1860 1861 <ul class="nav nav-pills nav-underline" role="tablist"> 1862 <li role="presentation" class="nav-item"><a href="#modal_user_login_panel" aria-controls="home" role="tab" data-bs-toggle="tab" class="nav-link active">Se connecter</a></li> 1863 <li role="presentation" class="nav-item"><a href="#modal_user_subscribe_panel" aria-controls="profile" role="tab" data-bs-toggle="tab" class="nav-link">Sâinscrire</a></li> 1864 </ul> 1865 1866 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1867 </div> 1868 <div class="modal-body"> 1869 <div class="tab-content no-border mb-0"> 1870 <div role="tabpanel" class="tab-pane active" id="modal_user_login_panel"> 1871 <form action="#" method="post" class="form-horizontal"> 1872 <div class="row form-group align-items-center"> 1873 <label class="col-form-label col-sm-4" for="login_email">Adresse email :</label> 1874 <div class="col-sm-8"> 1875 <input type="text" id="login_email" name="login" class="form-control" placeholder="Adresse email" autocomplete="username" /> 1876 </div> 1877 </div> 1878 <div class="row form-group align-items-center"> 1879 <label class="col-form-label col-sm-4" for="login_password">Mot de passe :</label> 1880 <div class="col-sm-8"> 1881 <input type="password" id="login_password" name="password" class="form-control" placeholder="Mot de passe" autocomplete="current-password" /> 1882 </div> 1883 </div> 1884 </form> 1885 <p class="float-end form-text"><a href="#" data-bs-toggle="modal" data-bs-target="#modal_user_password_forgotten">Mot de passe oublié</a></p> 1886 <div class="cl"></div> 1887 </div> 1888 <div role="tabpanel" class="tab-pane" id="modal_user_subscribe_panel"> 1889 <form action="#" method="post" class="form-horizontal"> 1890 <div class="form-group"> 1891 <label class="col-form-label" for="modal_user_login_subscribe_email">Adresse email :</label> 1892 <input type="text" id="modal_user_login_subscribe_email" name="email" autocomplete="off" class="form-control" placeholder="Adresse email" /> 1893 </div> 1894 </form> 1895 </div> 1896 </div> 1897 </div> 1898 <div class="modal-footer"> 1899 <button type="submit" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" class="btn btn-primary">Valider</button> 1900 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 1901 </div> 1902 </div> 1903 </div> 1904</div> 1905
1906<script> 1907 $('div#modal_user_login').on('show.bs.modal', function (event) { 1908 let button = $(event.relatedTarget); 1909 const modal = Modal.init($(this)); 1910 if (typeof FormHelper == 'undefined') { // hack si click modal avant chargement complet de la page 1911 return false; 1912 } 1913 let form = FormHelper.hideFormErrors(modal.find('form')); 1914 1915 let btnSubmit = FormHelper.buttonLoader(modal.find('button[name="validate"]'), 'reset'); 1916 btnSubmit.off('click').click(function (e) { 1917 e.preventDefault(); 1918 FormHelper.buttonLoader($(this), 'loading'); 1919 FormHelper.hideFormErrors(form); 1920 1921 //console.log(modal.find('.tab-pane.active').id()); 1922 //console.log(modal.find('.tab-pane.active').attr('id')); 1923 if (modal.find('.tab-pane.active').attr('id') === 'modal_user_subscribe_panel') { 1924 $('#modal_user_subscribe').find('input[name="email"]').val(form.find('input[name="email"]').val()); 1925 $('#modal_user_subscribe').modal('show'); 1926 1927 modal.modal('hide'); 1928 return; 1929 } 1930 1931 // Récupération du token (si échec, identifiants invalides) 1932 let formData = new FormData(); 1933 formData.append('email', form.find('input[name="login"]').val()); 1934 formData.append('password', form.find('input[name="password"]').val()); 1935 HTTPClient.request('POST', URL_API+'/login', formData, 1936 (data) => JwtSession.login(data, UrlAndQueryString.setParamOfUrl('success', 'Vous êtes maintenant connecté sur votre compte.', User.getRedirectUrlAfterLogin())), 1937 () => FormHelper.displayFormErrors(form, btnSubmit, ['Lâadresse email ou le mot de passe est incorrect.']), 1938 null, 1939 {'Content-Type': 'application/json'} 1940 ); 1941 }); 1942 1943 if (button.data('default_email')) { 1944 form.find('input[name="login"]').val(button.data('default_email')); 1945 } 1946 if (button.data('default_password')) { 1947 form.find('input[name="password"]').val(button.data('default_password')); 1948 } 1949 }); 1950</script>
1950 1951 1952<div id="modal_user_subscribe" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 1953 <div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable"> 1954 <div class="modal-content"> 1955 <div class="modal-header border-0 pb-0"> 1956 <div> 1957 <h5 class="modal-title mb-1">Sâinscrire</h5> 1958 <p class="text-muted small mb-0">Quelques infos et câest parti.</p> 1959 </div> 1960 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 1961 </div> 1962 <form action="#" method="post" style="display: contents;"> 1963 <div class="modal-body pt-3"> 1964 1965 <div class="d-flex align-items-center gap-3 p-3 mb-4 rounded-3 bg-primary-subtle border border-primary-subtle"> 1966 <i class="fas fa-gift fa-2x text-primary"></i> 1967 <div> 1968 <div class="fw-semibold">7 jours dâessai gratuit, sans engagement.</div> 1969 <div class="small text-muted">Une fois inscrit, vous recevrez un email récapitulant vos informations.</div> 1970 </div> 1971 </div> 1972 1973 <div class="form_errors_content"></div> 1974 1975 <h6 class="text-uppercase small fw-semibold mb-2"> 1976 <i class="far fa-building me-1"></i> Société 1977 </h6> 1978 <div class="form-group"> 1979 <input type="text" id="subscribe_company_name" name="company_name" size="30" class="form-control form-control-lg" value="" placeholder="Nom de la société" autocomplete="organization" /> 1980 </div> 1981 1982 <h6 class="text-uppercase small fw-semibold mb-2 pt-2"> 1983 <i class="far fa-user me-1"></i> Coordonnées 1984 </h6> 1985 <div class="row g-2"> 1986 <div class="col-md-2"> 1987 <div class="form-group"> 1988 <select id="subscribe_gender" name="gender" class="form-select"> 1989 <option value="0">-</option> 1990 <option value="1">M.</option> 1991 <option value="2">Mme</option> 1992 </select> 1993 </div> 1994 </div> 1995 <div class="col-md-5"> 1996 <div class="form-group"> 1997 <input type="text" id="subscribe_first_name" name="first_name" size="30" class="form-control" value="" autocomplete="given-name" placeholder="Prénom" /> 1998 </div> 1999 </div> 2000 <div class="col-md-5"> 2001 <div class="form-group"> 2002 <input type="text" id="subscribe_last_name" name="last_name" size="30" class="form-control" value="" autocomplete="family-name" placeholder="Nom" /> 2003 </div> 2004 </div> 2005 </div> 2006 2007 <div class="form-group"> 2008 <input type="email" id="subscribe_email" name="email" size="40" class="form-control w-100" value="" autocomplete="username" placeholder="Adresse email" /> 2009 </div> 2010 <div class="row g-2"> 2011 <div class="col-md-6"> 2012 <div class="form-group"> 2013 <div class="input-group"> 2014 <span class="input-group-text">Fixe</span> 2015 <input type="text" id="subscribe_landline_phone" name="landline_phone" size="25" class="form-control w-100" value="" autocomplete="tel" /> 2016 </div> 2017 </div> 2018 </div> 2019 <div class="col-md-6"> 2020 <div class="form-group"> 2021 <div class="input-group"> 2022 <span class="input-group-text">Mobile</span> 2023 <input type="text" id="subscribe_mobile_phone" name="mobile_phone" size="25" class="form-control w-100" value="" autocomplete="tel" /> 2024 </div> 2025 </div> 2026 </div> 2027 </div> 2028 2029 <h6 class="text-uppercase small fw-semibold mb-2 pt-2"> 2030 <i class="fas fa-map-marker-alt me-1"></i> Adresse postale 2031 </h6> 2032 <div class="form-group"> 2033 <label for="subscribe_street" class="form-label visually-hidden">Adresse postale :</label> 2034 <input type="text" id="subscribe_street" name="street" size="40" class="form-control" value="" placeholder="N° et nom de rue" autocomplete="street-address" /> 2035 </div> 2036 <div class="form-group"> 2037 <input type="text" id="subscribe_additional_address" name="additional_address" size="40" class="form-control" value="" placeholder="Complément (bât., étage, etc.)" autocomplete="street-address" /> 2038 </div> 2039 <div class="row g-2"> 2040 <div class="col-md-3"> 2041 <div class="form-group"> 2042 <input type="text" id="subscribe_zip_code" name="zip_code" size="5" class="form-control" value="" placeholder="Code postal" autocomplete="postal-code" /> 2043 </div> 2044 </div> 2045 <div class="col-md-5"> 2046 <div class="form-group"> 2047 <input type="text" id="subscribe_city" name="city" size="30" class="form-control" value="" placeholder="Ville" autocomplete="address-level2" /> 2048 </div> 2049 </div> 2050 <div class="col-md-4"> 2051 <div class="form-group"> 2052 <select id="subscribe_country" name="country" class="form-control ts-select"></select> 2053 </div> 2054 </div> 2055 </div> 2056 2057 <h6 class="text-uppercase small fw-semibold mb-2 pt-2"> 2058 <i class="fas fa-lock me-1"></i> Mot de passe 2059 </h6> 2060 <div class="row g-2 mb-3"> 2061 <div class="col-md-6"> 2062 <div class="form-group"> 2063 <input type="password" id="subscribe_password" name="password" size="30" class="form-control" placeholder="Mot de passe" autocomplete="new-password" /> 2064 </div> 2065 </div> 2066 <div class="col-md-6"> 2067 <div class="form-group"> 2068 <input type="password" id="subscribe_password_confirmation" name="password_confirmation" size="30" class="form-control" placeholder="Confirmer le mot de passe" autocomplete="new-password" /> 2069 </div> 2070 </div> 2071 </div> 2072 2073 <div class="form-group form-check mb-0"> 2074 <input type="checkbox" name="newsletter" value="1" id="subscribe_newsletter" class="form-check-input" /> 2075 <label for="subscribe_newsletter" class="form-check-label">Sâinscrire à la newsletter</label> 2076 </div> 2077 2078 <input type="hidden" name="gclid" value="" /> 2079 2080 </div> 2081 <div class="modal-footer flex-column align-items-stretch border-0 pt-0"> 2082 <button type="submit" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" class="btn btn-primary btn-lg w-100" id="user_subscribe_button">Sâinscrire</button> 2083 <button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Annuler</button> 2084 </div> 2085 </form> 2086 </div> 2087 </div> 2088</div> 2089
2090<script> 2091 $('div#modal_user_subscribe').on('show.bs.modal', function (event) { 2092 let button = $(event.relatedTarget); 2093 const modal = Modal.init($(this)); 2094 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2095 form.find('input[name="landline_phone"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(itiFixedLineNumberField)); 2096 form.find('input[name="mobile_phone"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(itiMobileNumberField)); 2097 2098 HTTPClient.request('POST', URL_API+'/user/subscribe', FormHelper.getFormData(form), 2099 (data) => { 2100 //console.log(data); 2101 const email = Email.normalize(form.find('input[name="email"]').val()); 2102 const password = form.find('input[name="password"]').val(); 2103 const phoneNumber = form.find('input[name="mobile_phone"]').val() || form.find('input[name="landline_phone"]').val(); 2104 2105 // Google Ads / Appvizer 2106 Appvizer.conversion('AP-27154') 2107 //gtag('event', 'conversion', {'send_to': 'AW-1071463623/YrcYCJCvzVwQx_n0_gM', 'value': 2.0, 'currency': 'EUR', 'transaction_id': email}); 2108 dataLayer.push({'event': 'subscribe', 'transaction_id': email, 'enhanced_conversion_data': {'email': email, 'phone_number': phoneNumber, 'first_name': form.find('input[name="first_name"]').val(), 'last_name': form.find('input[name="last_name"]').val()}}); 2109 2110 // Récupération du token (si échec, identifiants invalides) 2111 let formData = new FormData(); 2112 formData.append('email', email); 2113 formData.append('password', password); 2114 HTTPClient.request('POST', URL_API+'/login', formData, 2115 (data) => JwtSession.login(data, UrlAndQueryString.setParamOfUrl('success', 'Votre inscription a été effectuée avec succès !', URL_TABLEAU_DE_BORD)), 2116 () => window.location = URL_INDEX, 2117 null, 2118 {'Content-Type': 'application/json'} 2119 ); 2120 2121 }, 2122 (response) => Api.displayError(response, modal), 2123 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2124 ); 2125 }); 2126 2127 // Phone number 2128 let itiFixedLineNumberField = TelephoneNumber.setIntlTelInput(form.find('input[name="landline_phone"]'), 'FIXED_LINE'); 2129 let itiMobileNumberField = TelephoneNumber.setIntlTelInput(form.find('input[name="mobile_phone"]'), 'MOBILE'); 2130 2131 form.find('[name="gender"]').val('0'); 2132 form.find('input[name="gclid"]').val(localStorage.getItem('gclid') || ''); 2133 2134 Password.displayPasswordStrength(modal.find('input[name="password"]')); 2135 2136 Country.fillSelectWithFlags(form.find('select[name="country"]'), 'FR'); 2137 }); 2138</script>
2138 2139 2140<div id="modal_user_contact_details_edit" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2141 <div class="modal-dialog modal-lg"> 2142 <div class="modal-content"> 2143 <div class="modal-header"> 2144 <h5 class="modal-title">Modifier les coordonnées</h5> 2145 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2146 </div> 2147 <form action="#" method="post"> 2148 <div class="modal-body"> 2149 <div data-is_user_type="supervisor|company"> 2150 <div class="form-group"> 2151 <label>Type de société :</label><br> 2152 <div class="form-inline company_types_list"></div> 2153 </div> 2154 <div class="form-group champs_societe"> 2155 <label for="user_contact_details_edit_company_name">Nom de la société :</label> 2156 <input type="text" id="user_contact_details_edit_company_name" name="company_name" size="30" class="form-control" value="" /> 2157 </div> 2158 </div> 2159 <label for="user_contact_details_edit_gender">Dirigeant :</label> 2160 <div class="row"> 2161 <div class="col-md-2"> 2162 <div class="form-group"> 2163 <select id="user_contact_details_edit_gender" name="gender" class="form-control"> 2164 <option value="0"> -</option> 2165 <option value="1"> M.</option> 2166 <option value="2"> Mme</option> 2167 </select> 2168 </div> 2169 </div> 2170 <div class="col-md-5"> 2171 <div class="form-group"> 2172 <input type="text" id="user_contact_details_edit_first_name" name="first_name" size="30" class="form-control" value="" placeholder="Prénom" /> 2173 </div> 2174 </div> 2175 <div class="col-md-5"> 2176 <div class="form-group"> 2177 <input type="text" id="user_contact_details_edit_last_name" name="last_name" size="30" class="form-control" value="" placeholder="Nom" /> 2178 </div> 2179 </div> 2180 </div> 2181 <div class="form-group"> 2182 <label for="user_contact_details_edit_email">Adresse email :</label> 2183 <input type="text" id="user_contact_details_edit_email" name="email" size="40" class="form-control" value="" /> 2184 </div> 2185 <div class="row"> 2186 <div class="col-md-6"> 2187 <div class="form-group"> 2188 <label for="user_contact_details_edit_landline_number">Téléphone fixe :</label> 2189 <input type="text" id="user_contact_details_edit_landline_number" name="landline_phone" size="30" class="form-control" value="" /> 2190 </div> 2191 </div> 2192 <div class="col-md-6"> 2193 <div class="form-group"> 2194 <label for="user_contact_details_edit_mobile_phone">Téléphone mobile :</label> 2195 <input type="text" id="user_contact_details_edit_mobile_phone" name="mobile_phone" size="30" class="form-control" value="" /> 2196 </div> 2197 </div> 2198 </div> 2199 <div class="form-group"> 2200 <label for="user_contact_details_edit_street">Adresse :</label> 2201 <input type="text" id="user_contact_details_edit_street" name="street" size="30" class="form-control" value="" placeholder="Rue" /> 2202 </div> 2203 <div class="form-group"> 2204 <input type="text" id="user_contact_details_edit_additional_address" name="additional_address" size="30" class="form-control" value="" placeholder="Complément" /> 2205 </div> 2206 <div class="row"> 2207 <div class="col-md-2"> 2208 <div class="form-group"> 2209 <input type="text" id="user_contact_details_edit_zip_code" name="zip_code" size="5" class="form-control" value="" placeholder="Code postal" /> 2210 </div> 2211 </div> 2212 <div class="col-md-5"> 2213 <div class="form-group"> 2214 <input type="text" id="user_contact_details_edit_city" name="city" size="30" class="form-control" value="" placeholder="Ville" /> 2215 </div> 2216 </div> 2217 <div class="col-md-5"> 2218 <div class="form-group"> 2219 <select id="user_contact_details_edit_country" name="country" class="form-control"></select> 2220 </div> 2221 </div> 2222 </div> 2223 </div> 2224 <div class="modal-footer"> 2225 <button type="submit" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" class="btn btn-warning">Enregistrer</button> 2226 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 2227 </div> 2228 </form> 2229 </div> 2230 </div> 2231</div> 2232
2233<script> 2234 $('div#modal_user_contact_details_edit').on('show.bs.modal', function (event) { 2235 let button = $(event.relatedTarget); 2236 const modal = Modal.init($(this)); 2237 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2238 form.find('input[name="landline_phone"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(itiFixedLineNumberField)); 2239 form.find('input[name="mobile_phone"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(itiMobileNumberField)); 2240 2241 if (User.getUserType() === 'reseller' || User.getUserType() === User.TYPE_SUPERVISOR) { 2242 HTTPClient.request('PATCH', URL_API+'/supervisor/'+User.getUserId(), FormHelper.getFormData(form), 2243 () => FlashMessage.displaySuccess("Vos coordonnées ont bien été modifiées.", true, modal), 2244 (response) => Api.displayError(response, modal), 2245 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2246 ); 2247 } 2248 else if (User.getUserType() === User.TYPE_COMPANY) { 2249 HTTPClient.request('PATCH', URL_API+'/company/'+User.getUserId(), FormHelper.getFormData(form), 2250 () => FlashMessage.displaySuccess("Vos coordonnées ont bien été modifiées.", true, modal), 2251 (response) => Api.displayError(response, modal), 2252 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2253 ); 2254 } 2255 else if (User.getUserType() === User.TYPE_EMPLOYEE) { 2256 HTTPClient.request('PATCH', URL_API+'/employee/'+User.getUserId(), FormHelper.getFormData(form), 2257 () => FlashMessage.displaySuccess("Vos coordonnées ont bien été modifiées.", true, modal), 2258 (response) => Api.displayError(response, modal), 2259 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2260 ); 2261 } 2262 }); 2263 2264 Company.fillCompanyTypeSelect(form); 2265 2266 // Phone number 2267 let itiFixedLineNumberField = TelephoneNumber.setIntlTelInput(form.find('input[name="landline_phone"]'), 'FIXED_LINE'); 2268 let itiMobileNumberField = TelephoneNumber.setIntlTelInput(form.find('input[name="mobile_phone"]'), 'MOBILE'); 2269 2270 Country.fillSelectWithFlags(form.find('select[name="country"]')); 2271 2272 CustomModal.addLoader(modal); 2273 modal.off('shown.bs.modal').on('shown.bs.modal', () => { 2274 if (User.getUserType() === 'reseller' || User.getUserType() === User.TYPE_SUPERVISOR) { 2275 HTTPClient.request('GET', URL_API+'/supervisor/'+User.getUserId(), null, 2276 supervisor => { 2277 form.find('input[name="company_type"][value="'+supervisor['company_type']+'"]').prop('checked', true); 2278 CustomFormHelper.companyDetailsFormUpdate(form); 2279 2280 form.find('input[name="company_name"]').val(supervisor['company_name']); 2281 form.find('select[name="gender"]').val(supervisor['gender']); 2282 form.find('input[name="first_name"]').val(supervisor['first_name']); 2283 form.find('input[name="last_name"]').val(supervisor['last_name']); 2284 form.find('input[name="email"]').val(supervisor['email']); 2285 form.find('input[name="landline_phone"]').val(supervisor['landline_phone']); 2286 form.find('input[name="mobile_phone"]').val(supervisor['mobile_phone']); 2287 form.find('input[name="street"]').val(supervisor['street']); 2288 form.find('input[name="additional_address"]').val(supervisor['additional_address']); 2289 form.find('input[name="zip_code"]').val(supervisor['zip_code']); 2290 form.find('input[name="city"]').val(supervisor['city']); 2291 SelectBox.setValue(form.find('select[name="country"]'), supervisor['country'] || 'FR'); 2292 2293 // force la détection du pays en fonction du numéro 2294 itiFixedLineNumberField.setNumber(form.find('input[name="landline_phone"]').val()); 2295 itiMobileNumberField.setNumber(form.find('input[name="mobile_phone"]').val()); 2296 2297 CustomModal.removeLoader(modal); 2298 }, 2299 (response) => Api.displayError(response, modal) 2300 ); 2301 } 2302 else if (User.getUserType() === User.TYPE_COMPANY) { 2303 HTTPClient.request('GET', URL_API+'/company/'+User.getUserId(), null, 2304 company => { 2305 form.find('input[name="company_type"][value="'+company['company_type']+'"]').prop('checked', true); 2306 CustomFormHelper.companyDetailsFormUpdate(form); 2307 2308 form.find('input[name="company_name"]').val(company['company_name']); 2309 form.find('select[name="gender"]').val(company['director_gender']); 2310 form.find('input[name="first_name"]').val(company['director_first_name']); 2311 form.find('input[name="last_name"]').val(company['director_last_name']); 2312 form.find('input[name="email"]').val(company['email']); 2313 form.find('input[name="landline_phone"]').val(company['landline_phone']); 2314 form.find('input[name="mobile_phone"]').val(company['mobile_phone']); 2315 form.find('input[name="street"]').val(company['street']); 2316 form.find('input[name="additional_address"]').val(company['additional_address']); 2317 form.find('input[name="zip_code"]').val(company['zip_code']); 2318 form.find('input[name="city"]').val(company['city']);
2319 SelectBox.setValue(form.find('select[name="country"]'), company['country'] || User.getAccountCountry()); 2320 2321 // force la détection du pays en fonction du numéro 2322 itiFixedLineNumberField.setNumber(form.find('input[name="landline_phone"]').val()); 2323 itiMobileNumberField.setNumber(form.find('input[name="mobile_phone"]').val()); 2324 2325 CustomModal.removeLoader(modal); 2326 }, 2327 (response) => Api.displayError(response, modal) 2328 ); 2329 } 2330 else if (User.getUserType() === User.TYPE_EMPLOYEE) { 2331 HTTPClient.request('GET', URL_API+'/employee/'+User.getUserId(), null, 2332 employee => { 2333 form.find('select[name="gender"]').val(employee['gender']); 2334 form.find('input[name="first_name"]').val(employee['first_name']); 2335 form.find('input[name="last_name"]').val(employee['last_name']); 2336 form.find('input[name="email"]').val(employee['email']); 2337 form.find('input[name="landline_phone"]').val(employee['landline_phone']); 2338 form.find('input[name="mobile_phone"]').val(employee['mobile_phone']); 2339 form.find('input[name="street"]').val(employee['street']); 2340 form.find('input[name="additional_address"]').val(employee['additional_address']); 2341 form.find('input[name="zip_code"]').val(employee['zip_code']); 2342 form.find('input[name="city"]').val(employee['city']); 2343 SelectBox.setValue(form.find('select[name="country"]'), employee['country'] || User.getAccountCountry()); 2344 2345 // force la détection du pays en fonction du numéro 2346 itiFixedLineNumberField.setNumber(form.find('input[name="landline_phone"]').val()); 2347 itiMobileNumberField.setNumber(form.find('input[name="mobile_phone"]').val()); 2348 2349 CustomModal.removeLoader(modal); 2350 }, 2351 (response) => Api.displayError(response, modal) 2352 ); 2353 } 2354 }); 2355 }); 2356</script>
2356 2357 2358<div id="modal_user_company_details_edit" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2359 <div class="modal-dialog"> 2360 <div class="modal-content"> 2361 <div class="modal-header"> 2362 <h5 class="modal-title">Modifier des informations de la société</h5> 2363 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2364 </div> 2365 <form action="#" method="post"> 2366 <div class="modal-body"> 2367 <div class="form-group"> 2368 <label>Type de société :</label><br> 2369 <div class="form-inline company_types_list"></div> 2370 </div> 2371 <div class="form-group"> 2372 <label for="user_company_details_edit_company_name">Nom de la société :</label> 2373 <input type="text" id="user_company_details_edit_company_name" name="company_name" size="30" class="form-control" value="" /> 2374 </div> 2375 <div class="row"> 2376 <div class="col-md-6"> 2377 <div class="form-group champs_societe champs_profession_liberale champs_autoentrepreneur"> 2378 <label for="user_company_details_edit_siret" class="control-label">SIRET :</label> 2379 <input type="text" id="user_company_details_edit_siret" name="siret" class="form-control" value="" /> 2380 </div> 2381 </div> 2382 <div class="col-md-6"> 2383 <div class="form-group champs_societe champs_profession_liberale champs_autoentrepreneur"> 2384 <label for="user_company_details_edit_ape" class="control-label">APE / Code NAF :</label> 2385 <input type="text" id="user_company_details_edit_ape" name="ape" class="form-control" value="" /> 2386 </div> 2387 </div> 2388 <div class="col-md-6 champs_societe"> 2389 <div class="form-group"> 2390 <label for="user_company_details_edit_forme" class="control-label">Forme sociale :</label> 2391 <input type="text" id="user_company_details_edit_forme" name="forme" class="form-control" value="" /> 2392 </div> 2393 </div> 2394 <div class="col-md-6 champs_societe"> 2395 <div class="form-group"> 2396 <label for="user_company_details_edit_capital" class="control-label">Capital :</label> 2397 2398 <div class="input-group"> 2399 <input type="text" id="user_company_details_edit_capital" name="capital" class="form-control" value="" /> 2400 <div class="input-group-text company_capital_currency"></div> 2401 </div> 2402 </div> 2403 </div> 2404 <div class="col-md-6 champs_societe champs_profession_liberale"> 2405 <div class="form-group"> 2406 <label for="user_company_details_edit_vat_number" class="control-label">Numéro de TVA :</label> 2407 <input type="text" id="user_company_details_edit_vat_number" name="vat_number" class="form-control" value="" /> 2408 </div> 2409 </div> 2410 </div> 2411 </div> 2412 <div class="modal-footer"> 2413 <button type="submit" name="validate" class="btn btn-warning" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Enregistrer</button> 2414 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 2415 </div> 2416 </form> 2417 </div> 2418 </div> 2419</div>
2420<script> 2421 $('div#modal_user_company_details_edit').on('show.bs.modal', function (event) { 2422 let button = $(event.relatedTarget); 2423 const modal = Modal.init($(this)); 2424 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2425 if (User.getUserType() === 'reseller' || User.getUserType() === User.TYPE_SUPERVISOR) { 2426 HTTPClient.request('PATCH', URL_API+'/supervisor/'+User.getUserId(), FormHelper.getFormData(form), 2427 () => FlashMessage.displaySuccess("Les informations de la société ont bien été modifiées.", true, modal), 2428 (response) => Api.displayError(response, modal), 2429 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2430 ); 2431 } 2432 else if (User.getUserType() === User.TYPE_COMPANY) { 2433 HTTPClient.request('PATCH', URL_API+'/company/'+User.getUserId(), FormHelper.getFormData(form), 2434 () => FlashMessage.displaySuccess("Les informations de la société ont bien été modifiées.", true, modal), 2435 (response) => Api.displayError(response, modal), 2436 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2437 ); 2438 } 2439 }); 2440 2441 Company.fillCompanyTypeSelect(form); 2442 2443 CustomModal.addLoader(modal); 2444 modal.off('shown.bs.modal').on('shown.bs.modal', () => { 2445 if (User.getUserType() === 'reseller' || User.getUserType() === User.TYPE_SUPERVISOR) { 2446 HTTPClient.request('GET', URL_API+'/supervisor/'+User.getUserId(), null, 2447 (supervisor) => { 2448 form.find('input[name="company_type"][value="'+supervisor['company_type']+'"]').prop('checked', true); 2449 CustomFormHelper.companyDetailsFormUpdate(form); 2450 2451 form.find('input[name="company_name"]').val(supervisor['company_name']); 2452 form.find('input[name="siret"]').val(supervisor['company_siret']); 2453 form.find('input[name="ape"]').val(supervisor['company_ape']); 2454 form.find('input[name="forme"]').val(supervisor['company_legal_status']); 2455 form.find('input[name="capital"]').val(supervisor['company_capital']); 2456 form.find('.company_capital_currency').text(supervisor['company_capital_currency']); 2457 // form.find('input[name="rcs"]').val(supervisor.rcs); 2458 // form.find('input[name="immatriculation_date"]').val(supervisor.immatriculation_date); 2459 form.find('input[name="vat_number"]').val(supervisor['company_vat_number']); 2460 2461 CustomModal.removeLoader(modal); 2462 }, 2463 (response) => Api.displayError(response, modal) 2464 ); 2465 } 2466 else if (User.getUserType() === User.TYPE_COMPANY) { 2467 HTTPClient.request('GET', URL_API+'/company/'+User.getUserId()+'/', null, 2468 (company) => { 2469 form.find('input[name="company_type"][value="'+company['company_type']+'"]').prop('checked', true); 2470 CustomFormHelper.companyDetailsFormUpdate(form); 2471 2472 form.find('input[name="company_name"]').val(company['company_name']); 2473 form.find('input[name="siret"]').val(company['siret']); 2474 form.find('input[name="ape"]').val(company['ape']); 2475 form.find('input[name="forme"]').val(company['legal_status']); 2476 form.find('input[name="capital"]').val(company['capital']); 2477 form.find('.company_capital_currency').text(company['capital_currency']); 2478 // form.find('input[name="rcs"]').val(company.rcs); 2479 // form.find('input[name="immatriculation_date"]').val(company.immatriculation_date); 2480 form.find('input[name="vat_number"]').val(company['vat_number']); 2481 2482 CustomModal.removeLoader(modal); 2483 }, 2484 (response) => Api.displayError(response, modal) 2485 ); 2486 } 2487 }); 2488 }); 2489</script>
2489 2490 2491<div id="modal_user_email_validation_send" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2492 <div class="modal-dialog"> 2493 <div class="modal-content"> 2494 <div class="modal-header"> 2495 <h5 class="modal-title">Valider mon adresse email</h5> 2496 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2497 </div> 2498 <form action="#" method="post"> 2499 <div class="modal-body"> 2500 <p class="confirmation_message">Voulez-vous envoyer un email de validation pour votre adresse email ?</p> 2501 </div> 2502 <div class="modal-footer"> 2503 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Envoyer</button> 2504 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 2505 </div> 2506 </form> 2507 </div> 2508 </div> 2509</div>
2510<script> 2511 $('div#modal_user_email_validation_send').on('show.bs.modal', function (event) { 2512 let button = $(event.relatedTarget); 2513 const modal = Modal.init($(this)); 2514 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2515 HTTPClient.request('POST', URL_API+'/user/send-email-validation', FormHelper.getFormData(form), 2516 () => FlashMessage.displaySuccess("Les informations pour valider votre adresse email ont bien été envoyées.", false, modal), 2517 (response) => Api.displayError(response, modal), 2518 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2519 ); 2520 }); 2521 }); 2522</script>
2522 2523 2524<div id="modal_user_password_edit" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2525 <div class="modal-dialog"> 2526 <div class="modal-content"> 2527 <div class="modal-header"> 2528 <h5 class="modal-title">Modifier mon mot de passe</h5> 2529 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2530 </div> 2531 <form action="#" method="post"> 2532 <div class="modal-body"> 2533 <input hidden="hidden" type="text" name="email" autocomplete="username email" value="" /> 2534 <div class="form-group"> 2535 <label for="user_password_edit_old_password">Ancien mot de passe :</label><br> 2536 <input type="password" id="user_password_edit_old_password" name="old_password" size="30" class="form-control" value="" autocomplete="current-password" /> 2537 </div> 2538 <div class="form-group"> 2539 <label for="user_password_edit_new_password">Nouveau mot de passe :</label><br> 2540 <input type="password" id="user_password_edit_new_password" name="new_password" size="30" class="form-control" value="" autocomplete="new-password" /> 2541 </div> 2542 <div class="form-group"> 2543 <label for="user_password_edit_password_confirmation">Confirmer le nouveau mot de passe :</label><br> 2544 <input type="password" id="user_password_edit_password_confirmation" name="password_confirmation" size="30" class="form-control" value="" autocomplete="new-password" /> 2545 </div> 2546 </div> 2547 <div class="modal-footer"> 2548 <button type="submit" name="validate" class="btn btn-warning" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Enregistrer</button> 2549 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 2550 </div> 2551 </form> 2552 </div> 2553 </div> 2554</div>
2555<script> 2556 $('div#modal_user_password_edit').on('show.bs.modal', function (event) { 2557 let button = $(event.relatedTarget); 2558 const modal = Modal.init($(this)); 2559 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2560 HTTPClient.request('POST', URL_API+'/user/edit-password', FormHelper.getFormData(form), 2561 () => FlashMessage.displaySuccess("Votre mot de passe a bien été modifié.", false, modal), 2562 (response) => Api.displayError(response, modal), 2563 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2564 ); 2565 }); 2566 2567 Password.displayPasswordStrength(modal.find('input[name="new_password"]')); 2568 2569 form.find('input[name="old_password"], input[name="new_password"], input[name="password_confirmation"]').val(''); 2570 }); 2571</script>
2571 2572 2573<div id="modal_user_password_forgotten" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2574 <div class="modal-dialog"> 2575 <div class="modal-content"> 2576 <div class="modal-header"> 2577 <h5 class="modal-title">Réinitialiser mon mot de passe</h5> 2578 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2579 </div> 2580 <form action="#" method="post"> 2581 <div class="modal-body"> 2582 <div class="alert alert-info"> 2583 Si vous avez oublié ou perdu votre mot de passe, vous pouvez le réinitialiser : indiquez lâadresse email de votre compte et vous recevrez un email avec un lien pour réinitialiser votre mot de passe. 2584 </div> 2585 <div class="form-group"> 2586 <label for="modal_user_password_forgotten_email">Adresse email du compte :</label> 2587 <input type="text" id="modal_user_password_forgotten_email" name="email" size="40" class="form-control" value="" /> 2588 </div> 2589 </div> 2590 <div class="modal-footer"> 2591 <button type="submit" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" class="btn btn-primary">Valider</button> 2592 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 2593 </div> 2594 </form> 2595 </div> 2596 </div> 2597</div>
2598<script> 2599 $('div#modal_user_password_forgotten').on('show.bs.modal', function (event) { 2600 let button = $(event.relatedTarget); 2601 const modal = Modal.init($(this)); 2602 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2603 HTTPClient.request('POST', URL_API+'/user/password-forgotten', FormHelper.getFormData(form), 2604 () => FlashMessage.displaySuccess("Un lien pour réinitialiser votre mot de passe vous a bien été renvoyé par email.", false, modal), 2605 (response) => Api.displayError(response, modal), 2606 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2607 ); 2608 }); 2609 2610 $('.modal').modal('hide'); 2611 }); 2612</script>
2612 2613 2614<div id="modal_user_reset_password" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2615 <div class="modal-dialog"> 2616 <div class="modal-content"> 2617 <div class="modal-header"> 2618 <h5 class="modal-title">Réinitialiser mon mot de passe</h5> 2619 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2620 </div> 2621 <form action="#" method="post"> 2622 <input type="text" name="username" autocomplete="username" hidden value="" /> 2623 <div class="modal-body"> 2624 <div class="alert alert-info"> 2625 Entrez votre nouveau mot de passe pour le réinitialiser et vous connecter. 2626 </div> 2627 <div class="form-group"> 2628 <label for="modal_user_reset_password_new_password">Nouveau mot de passe :</label><br> 2629 <input type="password" id="modal_user_reset_password_new_password" name="password" size="30" class="form-control" value="" autocomplete="new-password" /> 2630 </div> 2631 <div class="form-group"> 2632 <label for="modal_user_reset_password_password_confirmation">Confirmer le nouveau mot de passe :</label><br> 2633 <input type="password" id="modal_user_reset_password_password_confirmation" name="password_confirmation" size="30" class="form-control" value="" autocomplete="new-password" /> 2634 </div> 2635 <input type="hidden" name="key" value="" /> 2636 </div> 2637 <div class="modal-footer"> 2638 <button type="submit" name="validate" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" class="btn btn-primary">Valider</button> 2639 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 2640 </div> 2641 </form> 2642 </div> 2643 </div> 2644</div>
2645<script> 2646 $('div#modal_user_reset_password').on('show.bs.modal', function (event) { 2647 let button = $(event.relatedTarget); 2648 const modal = Modal.init($(this)); 2649 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2650 HTTPClient.request('POST', URL_API+'/user/password-reset', FormHelper.getFormData(form), 2651 () => { 2652 FlashMessage.displaySuccess("Votre mot de passe a bien été réinitialisé.", false, modal); 2653 $('#modal_user_login').modal('show'); 2654 }, 2655 //() => window.location.href = URL_INDEX+'?login&success='+encodeURIComponent('Votre mot de passe a bien été réinitialisé.'), 2656 (response) => Api.displayError(response, modal), 2657 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 2658 ); 2659 }); 2660 2661 let resetKey = UrlAndQueryString.getParam('key'); 2662 form.find('input[name="key"]').val(resetKey); 2663 form.find('input[name="username"]').val(User.getEmail()); 2664 2665 Password.displayPasswordStrength(modal.find('input[name="password"]')); 2666 2667 // Vérification du token de réinitialisation 2668 CustomModal.addLoader(modal); 2669 let formData = new FormData(); 2670 formData.append('key', resetKey); 2671 HTTPClient.request('POST', URL_API+'/user/password-reset', formData, 2672 () => CustomModal.removeLoader(modal), 2673 (response, json) => { 2674 let error = FormHelper.extractErrorKeyOfJson(json); 2675 console.error(error); 2676 if (error === 'password_reset_link_not_valid' || error === 'password_reset_link_expired') { 2677 window.location.href = URL_INDEX+'?error='+encodeURIComponent('Le lien de réinitialisation du mot de passe est incorrect ou expiré. Veuillez re-demander la réinitialisation de votre mot de passe.'); 2678 // cette solution ne fonctionne pas (le modal n'est pas caché) 2679 //window.history.pushState("", "", UrlAndQueryString.deleteParamsOfUrl(['key', 'reset-password'])); 2680 //FlashMessage.displayError("Le lien de réinitialisation du mot de passe est incorrect ou expiré. Veuillez re-demander la réinitialisation de votre mot de passe.", modal); 2681 return; 2682 } 2683 CustomModal.removeLoader(modal); 2684 } 2685 ); 2686 }); 2687</script>
2687 2688 2689
2690<script defer src="/dist/runtime.bundle.js?1787867340"></script>
vendor: 2 bytes, line 2690
2690
2691<script defer src="/dist/vendors.bundle.js?1787867340"></script>
vendor: 2 bytes, line 2691
2691
2692<script defer src="/dist/commons.bundle.js?1787867340"></script>
vendor: 2 bytes, line 2692
2692
2693<script defer src="/dist/app.bundle.js?1787867340"></script>
2693 2694 2695
2696<script> 2697 // Publiques 2698 const URL_INDEX = "/"; 2699 const URL_CONTACT = "/contacter-le-service-de-pointeuse-virtuelle"; 2700 const URL_FAQ = "/aide-sur-le-service-de-badgeuse-par-telephone"; 2701 const URL_DEMO = "/demo-du-systeme-de-pointage"; 2702 const URL_PRESENTATION = "/presentation-de-la-solution-de-pointeuse-virtuelle"; 2703 const URL_SOCIETE = "/presentation-de-la-societe"; 2704 const URL_TARIFS = "/tarifs-du-service-de-pointage-par-telephone"; 2705 const URL_PLAN_DU_SITE = "/plan-du-site-mytime"; 2706 const URL_NEWSLETTER = "/newsletters"; 2707 2708 // Espace client 2709 const URL_INSCRIPTION = "/espace-client/inscription"; 2710 const URL_CONNEXION = "/espace-client/connexion"; 2711 const URL_INIT_MDP = "/espace-client/initialisation-du-mot-de-passe"; 2712 const URL_TABLEAU_DE_BORD = "/espace-client/tableau-de-bord"; 2713 const URL_COORDONNEES_VISU = "/espace-client/coordonnees"; 2714 const URL_JOURNAL_ACTIVITE = "/espace-client/journal-d-activite"; 2715 const URL_PARAMS_VISU = "/parametres"; 2716 2717 // Pointer 2718 const URL_CLOCK_IN_BY_MYTIME_FR = "/pointer/"; 2719 const URL_CLOCK_IN_BY_NET = "/controller/pointer/clock_in_by_net.php"; 2720 const URL_CLOCK_IN_BY_NET_URL = "/controller/pointer/clock_in_by_net_url.php"; 2721 const URL_CLOCK_IN_BY_NFC = "/controller/pointer/clock_in_by_nfc.php"; 2722 const URL_CLOCK_IN_BY_BARCODE = "/controller/pointer/clock_in_by_barcode.php"; 2723 const URL_POINTAGE_FONCTIONNEMENT = "/fonctionnement"; 2724 2725 // Gestion des clients 2726 const URL_GESTION_SUPERVISOR = "/controller/supervisor/gestion_supervisor.php"; 2727 const URL_SUPERVISOR_DETAIL = "/controller/supervisor/supervisor_detail.php"; 2728 const URL_SUPERVISOR_SEARCH = "/controller/supervisor/supervisor_search.php"; 2729 const URL_SUPERVISOR_LISTER = "/controller/supervisor/supervisor_lister.php"; 2730 const URL_SUPERVISOR_ADD = "/controller/supervisor/supervisor_add.php"; 2731 2732 // Gestion employés 2733 const URL_EMPLOYEE_LIST = "/employes"; 2734 const URL_EMPLOYEE_PROFILE = "/employe/fiche"; 2735 const URL_DEPARTMENT_VISUALISATION = "/service/fiche"; 2736 2737 // Gestion sociétés/missions 2738 const URL_COMPANIES_AND_TASKS_LIST = "/societes-missions"; 2739 const URL_COMPANY_PROFILE = "/societe/fiche"; 2740 const URL_ZONE_VISUALISATION = "/zone/fiche"; 2741 const URL_TASK_PROFILE = "/mission/fiche"; 2742 2743 // Pointages Liste / Stats 2744 const URL_POINTAGES_LISTE = "/pointages"; 2745 const URL_LISTING = "/listing"; 2746 2747 // Alertes 2748 const URL_NOTIFICATIONS_LIST = "/notifications"; 2749 2750 // Planning 2751 const URL_PLANIFICATION_LISTE = "/planifications"; 2752 const URL_PLANNING = "/planning"; 2753 2754 // Congés 2755 const URL_DAY_OFF_LIST = "/conges-et-arrets"; 2756 const URL_DAY_OFF_COUNTER_LIST = "/compteurs-des-conges-et-arrets"; 2757 2758 // Facture général 2759 const URL_FACTURES = "/facturation"; 2760 const URL_ACHAT_CHOIX_ABO = "/achat/abonnement"; 2761 const URL_ACHAT_CHOIX_PAIEMENT = "/achat/validation"; 2762 const URL_FACTURE_PAIEMENT = "/facture/paiement"; 2763 2764 const URL_API_AND_WEBHOOK = "/api-et-webhooks"; 2765</script>
2765 2766<!-- Defines -->
2767<script> 2768 const URL_API = "https://api.mytime.fr"; 2769 const URL_DATA_FILES = "https://api.mytime.fr/data/"; 2770 2771 const labelErrorOccurred = "Une erreur sâest produite."; 2772 const labelErrorAccountDisabled = "Vous ne pouvez pas faire cette action car ce compte est désactivé."; 2773 const labelErrorAccountDemo = "Vous ne pouvez pas faire cette action depuis le compte de démonstration."; 2774 const messageDownloadFileInProgress = "Le téléchargement du fichier est en coursâ¦"; 2775 const labelOneDownloadFileInProgress = "<strong>1</strong> téléchargement en cours"; 2776 const labelManyDownloadFileInProgress = "<strong>%s</strong> téléchargements en cours"; 2777 2778 const ROOT_PATH = "/"; 2779 const SITE_NAME = "myTime"; 2780 const URL_WEBSITE = "https://www.mytime.fr"; 2781 const URL_MYTIME_APP_ANDROID = "https://play.google.com/store/apps/details?id=com.osimatic.mytime"; 2782 const URL_MYTIME_APP_IOS = "https://itunes.apple.com/fr/app/mytime-pointeuse-virtuelle/id988395830"; 2783 const IMG_PATH = "/images/"; 2784 const IS_PAGE_POINTAGE = 0; 2785 const IS_LOCAL = 0; 2786 const CHATRA_ID = "tojKFz6BQDaRYcQWa"; 2787 const BILLING_CURRENCY = "EUR"; 2788 let CURRENT_VERSION = null; 2789 2790 const GOOGLE_RECAPTCHA_SITE_KEY = "6Le_AE0pAAAAAJd8mdSyAVmdpeNFmgBRgy-S-F3E"; 2791 2792 const FIREBASE_API_KEY = "AIzaSyCGLUtloCJS_HiWeGB3MhNjXvTy-PQtHk4"; 2793 const FIREBASE_AUTH_DOMAIN = "mytime-9b3f7.firebaseapp.com"; 2794 const FIREBASE_PROJECT_ID = "mytime-9b3f7"; 2795 const FIREBASE_STORAGE_BUCKET = "mytime-9b3f7.appspot.com"; 2796 const FIREBASE_MESSAGING_SENDER_ID = "897841735307"; 2797 const FIREBASE_APP_ID = "1:897841735307:web:a295d80ea7bb9f0b40968e"; 2798 const FIREBASE_MEASUREMENT_ID = "G-YVDTLLPPWT"; 2799</script>
2799 2800 2801<!-- fichiers JS -->
2802<script defer src="/dist/init.bundle.js?1787867340"></script>
vendor: 2 bytes, line 2802
2802
2803<script defer src="/dist/layout.bundle.js?1787867340"></script>
2803 2804 2805 <div class="billing_warning_account_disabled_base hide"> 2806 <div class="alert alert-warning center text-bold billing_warning_account_disabled hide"> 2807 <p> 2808 Pour utiliser le service de pointeuse virtuelle, veuillez <a href="/achat/abonnement" title="Acheter un abonnement">acheter un abonnement</a>. 2809 </p> 2810 <a href="/achat/abonnement" class="btn btn-sm btn-light" data-is_user_type="supervisor">Acheter un abonnement</a> 2811 </div> 2812 <div class="alert alert-warning center text-bold billing_warning_test_expired hide"> 2813 <p> 2814 Votre période de test est arrivée à son terme.<br/> 2815 Pour continuer utiliser le service de pointeuse virtuelle, veuillez acheter un abonnement. 2816 </p> 2817 <a href="/achat/abonnement" class="btn btn-sm btn-light" data-is_user_type="supervisor">Acheter un abonnement</a> 2818 </div> 2819 <div class="alert alert-danger center text-bold billing_warning_subscription_expired hide"> 2820 <p> 2821 Lâabonnement au compte myTime est terminé depuis le <span class="subscription_end_date"></span>.<br> 2822 Le compte est désactivé, les employés ne peuvent plus pointer et lâaccès aux données est désactivé. Pour continuer à utiliser myTime, veuillez renouveler votre abonnement. 2823 </p> 2824 <a href="/achat/abonnement" class="btn btn-sm btn-light" data-is_user_type="supervisor">Renouveler lâabonnement</a> 2825 </div> 2826 <div class="alert alert-danger center text-bold billing_warning_subscription_soon_expired hide"> 2827 <p> 2828 Lâabonnement au compte myTime expire dans <span class="nb_days_before_subscription_end"></span> jours.<br> 2829 Si vous ne renouvelez pas lâabonnement, le compte sera désactivé, les employés ne pourront plus pointer et lâaccès aux données sera désactivé. 2830 </p> 2831 <a href="/achat/abonnement" class="btn btn-sm btn-light" data-is_user_type="supervisor">Renouveler lâabonnement</a> 2832 </div> 2833 <div class="alert alert-warning center billing_warning_subscription_soon_expired_but_monthly_subscription_enabled hide"> 2834 Lâabonnement au compte myTime expire dans <span class="nb_days_before_subscription_end"></span> jours.<br> 2835 à partir de cette date, lâabonnement passe en mensuel avec renouvellement automatique. 2836 </div> 2837 <div class="alert alert-warning center text-bold billing_warning_monthly_subscription_stopped hide"> 2838 <p> 2839 Lâabonnement mensuel a été résilié le <span class="monthly_subscription_termination_date"></span>. Le compte sera désactivé le <span class="monthly_subscription_end_date"></span>. 2840 </p> 2841 <a href="#" data-bs-toggle="modal" data-bs-target="#modal_billing_monthly_subscription_enabled" class="btn btn-sm btn-light" data-is_user_type="supervisor">Ré-activer lâabonnement mensuel</a> 2842 </div> 2843 <div class="alert alert-danger center text-bold billing_warning_monthly_subscription_stopped_for_unpaid_invoices hide"> 2844 Le paiement de vos dernières factures a échoué ou nâa pas été effectué, le renouvellement automatique de votre abonnement mensuel est donc désactivé.<br/> 2845 Nous vous prions de bien vouloir régulariser votre situation dans les meilleurs délais et de réactiver le renouvellement automatique de votre abonnement mensuel.<br/> 2846 Votre compte sera désactivé le <strong><span class="monthly_subscription_end_date"></span></strong> si aucun règlement nâest effectué avant cette date. 2847 </div> 2848 <div class="alert alert-danger center text-bold billing_warning_monthly_subscription_stopped_and_finished hide"> 2849 <p> 2850 Lâabonnement mensuel a été résilié le <span class="monthly_subscription_termination_date"></span> et le compte a été désactivé le <span class="monthly_subscription_end_date"></span>. 2851 </p> 2852 <a href="/achat/abonnement" class="btn btn-sm btn-light" data-is_user_type="supervisor">Renouveler lâabonnement</a> 2853 </div> 2854</div> 2855 2856<div class="billing_subscription_infos_base hide"> 2857 <div class="alert alert-info center"> 2858 <span class="demo_finished text-danger text-bold hide">Période de test terminée depuis le <span class="demo_end_date"></span></span> 2859 <span class="demo_disabled text-warning hide">Pas de période de test sur ce compte.</span> 2860 <span class="subscription_finished subscription_expired text-danger text-bold hide">Abonnement terminé depuis le <span class="subscription_end_date"></span></span> 2861 <span class="no_subscription text-warning hide">Aucun abonnement en cours.</span> 2862 <span class="demo_activated hide">
2862Actuellement en période de test.</span> 2863 <span class="monthly_subscription_stopped text-danger text-bold hide">Abonnement mensuel résilié le <span class="subscription_termination_date"></span></span> 2864 <span class="monthly_subscription_disabled_for_unpaid_invoices text-danger text-bold hide">Abonnement mensuel désactivé pour impayé</span> 2865 <span class="monthly_subscription_stopped_and_finished text-danger text-bold hide">Abonnement mensuel résilié le <span class="subscription_termination_date"></span> et terminé depuis le <span class="subscription_end_date"></span></span> 2866 <span class="monthly_subscription_enabled_after_end_of_yearly_subscription text-warning text-bold hide">Lâabonnement annuel passera en mensuel à la fin de lâabonnement actuel.</span> 2867 2868 <table class="table list_values mb-0 subscription_details hide"> 2869 <tr> 2870 <td>Abonnement : </td> 2871 <td class="text-start subscription_type"> 2872 <span class="monthly_subscription hide">Mensuel</span> 2873 <span class="yearly_subscription hide">Annuel</span> 2874 </td> 2875 </tr> 2876 <tr> 2877 <td>Tarif mensuel : </td> 2878 <td class="text-start subscription_cost"></td> 2879 </tr> 2880 <tr> 2881 <td>Nb max employés :</td> 2882 <td class="text-start nb_max_employees"></td> 2883 </tr> 2884 <tr> 2885 <td>
2885Date de renouvellement :</td> 2886 <td class="text-start monthly_subscription_renew_date"></td> 2887 </tr> 2888 <tr> 2889 <td>Date de fin :</td> 2890 <td class="text-start subscription_end_date test_end_date"></td> 2891 </tr> 2892 </table> 2893 </div> 2894</div> 2895<div id="modal_get_demo" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 2896 <div class="modal-dialog modal-lg"> 2897 <div class="modal-content"> 2898 <div class="modal-header"> 2899 <h5 class="modal-title">Planifier une démonstration personnalisée</h5> 2900 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 2901 </div> 2902 <form action="#" method="post" class="demo_form"> 2903 <div class="modal-body"> 2904 <div class="row form"> 2905 <div class="col-md-6"> 2906 <div class="title">Planifier une démonstration personnalisée</div> 2907 Remplissez le formulaire et notre équipe vous contactera pour vous faire découvrir MyTime et répondre à vos questions. 2908 </div> 2909 <div class="col-md-6"> 2910 <div class="row"> 2911 <div class="col-md-6"> 2912 <div class="form-group"> 2913 <label class="control-label sr-only" for="get_demo_first_name">Prénom :</label> 2914 <input type="text" size="22" id="get_demo_first_name" name="first_name" class="form-control" placeholder="Prénom" /> 2915 </div> 2916 </div> 2917 <div class="col-md-6"> 2918 <div class="form-group"> 2919 <label class="control-label sr-only" for="get_demo_last_name">Nom :</label> 2920 <input type="text" size="22" id="get_demo_last_name" name="last_name" class="form-control" placeholder="Nom" /> 2921 </div> 2922 </div> 2923 </div> 2924 <div class="form-group"> 2925 <label class="control-label sr-only" for="get_demo_company_name">Nom de lâentreprise :</label> 2926 <input type="text" size="22" id="get_demo_company_name" name="company_name" class="form-control" placeholder="Nom de lâentreprise" /> 2927 </div> 2928 <div class="form-group"> 2929 <label class="control-label sr-only" for="get_demo_email">Adresse email :</label> 2930 <input type="text" size="22" id="get_demo_email" name="email" class="form-control" placeholder="Adresse email" /> 2931 </div> 2932 <div class="form-group"> 2933 <label class="control-label sr-only" for="get_demo_phone_number">Téléphone :</label> 2934 <input type="text" size="22" id="get_demo_phone_number" name="phone_number" class="form-control" placeholder="Téléphone" /> 2935 </div> 2936 <div class="row"> 2937 <div class="col-md-6"> 2938 <div class="form-group"> 2939 <label class="control-label sr-only" for="get_demo_company_activity">Secteur dâactivité :</label> 2940 <input type="text" size="22" id="get_demo_company_activity" name="company_activity" class="form-control" placeholder="Secteur dâactivité" /> 2941 </div> 2942 </div> 2943 <div class="col-md-6"> 2944 <div class="form-group"> 2945 <label class="control-label sr-only" for="get_demo_company_nb_employees">Nombre dâemployés :</label> 2946 <input type="text" size="22" id="get_demo_company_nb_employees" name="company_nb_employees" class="form-control" placeholder="Nombre dâemployés" /> 2947 </div> 2948 </div> 2949 </div> 2950 <div class="form-group">
2951 <div id="get_demo_grecaptcha" class="grecaptcha"></div> 2952 </div> 2953 </div> 2954 </div> 2955 </div> 2956 <div class="modal-footer"> 2957 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦" id="get_demo_button">Valider</button> 2958 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 2959 </div> 2960 </form> 2961 2962 <div class="demo_schedule_selection hide"> 2963 <div class="modal-body"> 2964 <div class="row"> 2965 <div class="col-md-12"> 2966 <div class="alert alert-success">Votre demande de démo a bien été enregistrée. Choisissez votre créneau horaire ci-dessous.</div> 2967 <iframe id="get_demo_hubspot_schedules" title="Choix créneau démonstration" src=""></iframe> 2968 </div><br /> 2969 </div> 2970 </div> 2971 </div> 2972 </div> 2973 </div> 2974</div>
2975<script> 2976 $('div#modal_get_demo').on('show.bs.modal', function (event) { 2977 let button = $(event.relatedTarget); 2978 const modal = Modal.init($(this)); 2979 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 2980 form.find('input[name="phone_number"]').val(TelephoneNumber.getEnteredNumberInInternationalFormat(itiPhoneNumberField)); 2981 2982 HTTPClient.request('POST', URL_API+'/contact/ask-demo', FormHelper.getFormData(form), 2983 () => { 2984 const email = Email.normalize(form.find('input[name="email"]').val()); 2985 const phoneNumber = form.find('input[name="phone_number"]').val(); 2986 Appvizer.conversion('AP-27154'); 2987 // Conversion Google Ads "Demande démo" déclenchée explicitement ici plutôt que par un trigger GTM basé sur la visibilité d'un élément du DOM, plus fiable 2988 // , 'first_name': form.find('input[name="first_name"]').val(), 'last_name': form.find('input[name="last_name"]').val() 2989 dataLayer.push({'event': 'demo_request', 'enhanced_conversion_data': {'email': email, 'phone_number': phoneNumber}}); 2990 modal.find('.demo_form').addClass('hide'); 2991 modal.find('.demo_schedule_selection').removeClass('hide'); 2992 modal.find('.demo_schedule_selection').find('iframe').prop('src', 'https://meetings.hubspot.com/mytime/demo?embed=true&firstName='+form.find('input[name="first_name"]').val() +'&lastName='+form.find('input[name="last_name"]').val()+'&email='+email+''); 2993 }, 2994 (response) => Api.displayError(response, modal), 2995 (json) => { 2996 if (captchaEnabled) {
2997 GoogleRecaptcha.reset('get_demo_grecaptcha'); 2998 } 2999 FormHelper.displayFormErrors(form, btnSubmit, json); 3000 } 3001 ); 3002 }); 3003 3004 // Captcha 3005 let captchaEnabled = form.find('#get_demo_grecaptcha').length; 3006 if (captchaEnabled) { 3007 GoogleRecaptcha.reset('get_demo_grecaptcha'); 3008 } 3009 3010 // Phone number 3011 let itiPhoneNumberField = TelephoneNumber.setIntlTelInput(form.find('input[name="phone_number"]'), 'FIXED_LINE_OR_MOBILE'); 3012 }); 3013</script>
3013 3014 3015<div id="modal_get_commercial_documentation" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 3016 <div class="modal-dialog modal-lg"> 3017 <div class="modal-content"> 3018 <div class="modal-header"> 3019 <h5 class="modal-title">Recevoir la documentation commerciale</h5> 3020 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 3021 </div> 3022 <form action="#" method="post" class=""> 3023 <div class="modal-body"> 3024 <div class="form-group"> 3025 <label for="contact_get_commercial_documentation_email" class="control-label">Votre adresse email :</label> 3026 <input type="text" id="contact_get_commercial_documentation_email" name="email" class="form-control" value="" /> 3027 </div> 3028 <div class="form-group"> 3029 <div id="get_commercial_documentation_grecaptcha" class="grecaptcha"></div> 3030 </div> 3031 </div> 3032 <div class="modal-footer"> 3033 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Valider</button> 3034 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 3035 </div> 3036 </form> 3037 </div> 3038 </div> 3039</div>
3040<script> 3041 $('div#modal_get_commercial_documentation').on('show.bs.modal', function (event) { 3042 let button = $(event.relatedTarget); 3043 const modal = Modal.init($(this)); 3044 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 3045 HTTPClient.request('POST', URL_API+'/contact/get-commercial-documentation', FormHelper.getFormData(form), 3046 () => { 3047 const email = Email.normalize(form.find('input[name="email"]').val()); 3048 Appvizer.conversion('AP-27154'); 3049 // Conversion Google Ads "Demande doc commerciale" déclenchée explicitement ici plutôt que par un trigger GTM basé sur la visibilité d'un élément du DOM (peu fiable, l'élément étant créé puis retiré 6 secondes après par FlashMessage) 3050 dataLayer.push({'event': 'documentation_request', 'enhanced_conversion_data': {'email': email}}); 3051 FlashMessage.displaySuccess("Vous allez recevoir la documentation commerciale par email.", false, modal); 3052 }, 3053 (response) => Api.displayError(response, modal), 3054 (json) => { 3055 if (captchaEnabled) { 3056 GoogleRecaptcha.reset('get_commercial_documentation_grecaptcha'); 3057 } 3058 FormHelper.displayFormErrors(form, btnSubmit, json); 3059 }, 3060 ); 3061 }); 3062 3063 // Captcha 3064 let captchaEnabled = $('#get_commercial_documentation_grecaptcha').length; 3065 if (captchaEnabled) { 3066 GoogleRecaptcha.reset('get_commercial_documentation_grecaptcha'); 3067 } 3068 }); 3069</script>
3069 3070 3071<div id="modal_newsletter_afficher" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 3072 <div class="modal-dialog modal-lg"> 3073 <div class="modal-content"> 3074 <div class="modal-header"> 3075 <h5 class="modal-title">Newsletter du <span class="newsletter_date"></span></h5> 3076 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 3077 </div> 3078 <div class="modal-body"> 3079 <div class="newsletter_contenu"></div> 3080 </div> 3081 <div class="modal-footer"> 3082 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> 3083 </div> 3084 </div> 3085 </div> 3086</div>
3087<script> 3088 $('div#modal_newsletter_afficher').on('show.bs.modal', function (event) { 3089 let button = $(event.relatedTarget); 3090 const modal = Modal.init($(this)); 3091 3092 var urlForm = '/newsletters?id_newsletter='+button.data('id_newsletter'); 3093 modal.find('form').attr('action', urlForm); 3094 modal.find('span.newsletter_titre').text(button.data('newsletter_titre')); 3095 modal.find('span.newsletter_date').text(TimestampUnix.getDateTextDisplay(button.data('newsletter_timestamp'))+' '+TimestampUnix.getTimeDisplay(button.data('newsletter_timestamp'))); 3096 modal.find('div.newsletter_contenu').html(button.data('newsletter_contenu')); 3097 }); 3098</script>
3098 3099 3100<div id="modal_newsletter_abonnement" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 3101 <div class="modal-dialog"> 3102 <div class="modal-content"> 3103 <div class="modal-header"> 3104 <h5 class="modal-title">Sâabonner à la newsletter</h5> 3105 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 3106 </div> 3107 <form action="#" method="post"> 3108 <div class="modal-body"> 3109 <div class="form-group"> 3110 <label for="newsletter_abonnement_email">Adresse email : </label> 3111 <input type="text" name="email" id="newsletter_abonnement_email" size="40" class="form-control" value="" /> 3112 </div> 3113 <div class="form-group"> 3114 <label for="newsletter_abonnement_company">Société : </label> 3115 <input type="text" name="company" id="newsletter_abonnement_company" class="form-control" value="" /> 3116 </div> 3117 <div class="row"> 3118 <div class="col-md-2"> 3119 <div class="form-group"> 3120 <label for="newsletter_abonnement_gender">Civilité :</label> 3121 <select name="gender" id="newsletter_abonnement_gender" class="form-control"> 3122 <option value="0">-</option> 3123 <option value="1">M.</option> 3124 <option value="2">Mme</option> 3125 </select> 3126 </div> 3127 </div> 3128 <div class="col-md-5"> 3129 <div class="form-group"> 3130 <label for="newsletter_abonnement_first_name">Prénom : </label> 3131 <input type="text" name="first_name" id="newsletter_abonnement_first_name" class="form-control" value="" /> 3132 </div> 3133 </div> 3134 <div class="col-md-5"> 3135 <div class="form-group"> 3136 <label for="newsletter_abonnement_last_name">Nom : </label> 3137 <input type="text" name="last_name" id="newsletter_abonnement_last_name" class="form-control" value="" /> 3138 </div> 3139 </div> 3140 </div> 3141 </div> 3142 <div class="modal-footer"> 3143 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Valider</button> 3144 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 3145 </div> 3146 </form> 3147 </div> 3148 </div> 3149</div>
3150<script> 3151 $('div#modal_newsletter_abonnement').on('show.bs.modal', function (event) { 3152 let button = $(event.relatedTarget); 3153 const modal = Modal.init($(this)); 3154 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 3155 HTTPClient.request('POST', URL_API+'/newsletter/subscribe', FormHelper.getFormData(form), 3156 () => FlashMessage.displaySuccess("Votre abonnement à la newsletter de myTime a bien été pris en compte ! <br>Vous recevrez régulièrement les nouveautés et des offres exclusives.", false, modal), 3157 (response) => Api.displayError(response, modal), 3158 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 3159 ); 3160 }); 3161 }); 3162</script>
3162 3163 3164<div id="modal_newsletter_desabonnement" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 3165 <div class="modal-dialog"> 3166 <div class="modal-content"> 3167 <div class="modal-header"> 3168 <h5 class="modal-title">Se désabonner de la newsletter</h5> 3169 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button> 3170 </div> 3171 <form action="#" method="post"> 3172 <div class="modal-body"> 3173 <div class="form-group"> 3174 <label for="modal_newsletter_desabonnement_email">Adresse email : </label> 3175 <input type="text" name="email" id="modal_newsletter_desabonnement_email" size="40" class="form-control" value="" /> 3176 </div> 3177 </div> 3178 <div class="modal-footer"> 3179 <button type="submit" name="validate" class="btn btn-primary" data-loading-text="<i class='fa fa-circle-notch fa-spin'></i> Traitement en coursâ¦">Valider</button> 3180 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button> 3181 </div> 3182 </form> 3183 </div> 3184 </div> 3185</div>
3186<script> 3187 $('div#modal_newsletter_desabonnement').on('show.bs.modal', function (event) { 3188 let button = $(event.relatedTarget); 3189 const modal = Modal.init($(this)); 3190 let form = FormHelper.init(modal.find('form'), (form, btnSubmit) => { 3191 HTTPClient.request('POST', URL_API+'/newsletter/unsubscribe', FormHelper.getFormData(form), 3192 () => FlashMessage.displaySuccess("Votre désabonnement à la newsletter de myTime a bien été pris en compte ! <br>Vous ne recevrez plus les nouveautés et des offres exclusives.", false, modal), 3193 (response) => Api.displayError(response, modal), 3194 (json) => FormHelper.displayFormErrors(form, btnSubmit, json) 3195 ); 3196 }); 3197 }); 3198</script>
3198 3199
3200<script> 3201 $(function() { 3202 let form = $('form.footer_newsletter_abonnement'); 3203 if (!form.length) { 3204 return; 3205 } 3206 3207 let btnSubmit = form.find('button[name="submit"]').off('click').click(function (e) { 3208 e.preventDefault(); 3209 $('#modal_newsletter_abonnement').find('input[name="email"]').val(form.find('input[name="email"]').val()); 3210 $('#modal_newsletter_abonnement').modal('show'); 3211 }); 3212 }); 3213</script>
3213 3214 3215<!-- Sentry --> 3216
3216<script defer src="/dist/sentry.bundle.js?1787867340"></script>
3216 3217 3218<!-- Firebase (pas utilisé pour le web) --> 3219 3220<!-- Google recaptcha -->
3221<script> 3222</script>
vendor: 87 bytes, lines 3222-3224
3222 3223<script src="https://www.google.com/recaptcha/api.js?hl=fr" async defer></script> 3224
3225<!-- ID requête : 6abe6c282ea9e --> 3226<!-- Page exécutée le 2026-10-01 16:20:24 --> 3227 3228</body> 3229</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.