❄
🎄
🕸️
🦇
🇫🇷
🌹
☀️
🍦
📱

Information sur l'application

Il est préférable d'utiliser l'application sur un Android ou sur un ordinateur (macOS ou Windows).

L'application n'est pas forcément adaptée pour un iPhone.

Si vous avez des questions beaucoup plus importantes, appuyez sur le bouton WhatsApp.

WhatsApp

Message à {{ prospecteurMessageModal.prospecteurName }}

Envoyer un message personnalisé

Messages

Vous avez {{ prospecteurReceivedMessageModal.allMessages.length }} messages à lire

Message de l'administrateur

{{ index + 1 }}

Message {{ index + 1 }}

C&N Solutions

Demande Confirmée

Votre report a été validé

Votre demande de report du rendez-vous

{{ prospecteurReportValidatedModal.rdv.civilite }} {{ prospecteurReportValidatedModal.rdv.nom }}

a été confirmée ✅

Ancien rendez-vous

{{ formatDateLong(prospecteurReportValidatedModal.rdv.oldDate) }} à {{ prospecteurReportValidatedModal.rdv.oldHeure }}

Nouveau rendez-vous

{{ formatDateLong(prospecteurReportValidatedModal.rdv.newDate) }} à {{ prospecteurReportValidatedModal.rdv.newHeure }}

Action Requise

Merci de bien vouloir cliquer sur le bouton ci-dessous

pour envoyer le rapport au client par SMS

Report Confirmé

Le report a été validé avec succès

L'agence enverra le message de report au client

Félicitations ! 🎉

Rendez-vous honoré et validé

Le rendez-vous avec

OK, {{ honoredRdvCelebrationModal.notifications.length }} rendez-vous ont été validés

{{ honoredRdvCelebrationModal.notifications[0].rdvNom || 'Client' }}

a été honoré et validé par l'équipe ✅

Client

{{ notif.rdvNom || 'Client' }}

{{ formatDateFr(notif.rdvDate) }}

+{{ formatPrice(notif.amountAdded || 0) }}

Continue comme ça ! 💪

Votre travail est remarquable et apprécié par toute l'équipe.

Configuration : {{ sourceConfigModal.source }}

Configurez les paramètres pour cette source

⚠️

Coordonnées demandées

Sélectionnez les informations qui seront demandées lors de la création d'un rendez-vous pour cette source :

Message de {{ prospectResponseModal.prospecteurName }}

{{ prospectResponseModal.message }}

Répondre rapidement :

Votre réponse

Écrivez votre message personnalisé

Message au prospect

{{ prospectMessageToSendModal.rdv ? `${prospectMessageToSendModal.rdv.civilite} ${prospectMessageToSendModal.rdv.nom}` : '' }}

Réponse du prospect

{{ prospectReplyModal.prospectName }}

{{ prospectReplyModal.response }}
🗑️
🚫

{{ forcedLogoutModal.type === 'deleted' ? 'Votre profil a été supprimé' : (forcedLogoutModal.type === 'force_logout' ? 'Déconnexion forcée' : 'Votre compte a été bloqué') }}

{{ forcedLogoutModal.type === 'deleted' ? 'Votre profil a été supprimé par l\'administrateur. Vous allez être redirigé vers la page de connexion.' : (forcedLogoutModal.type === 'force_logout' ? 'Vous avez été déconnecté par l\'administrateur. Vous pouvez vous reconnecter.' : 'Votre compte a été bloqué. Contactez l\'administrateur pour plus d\'informations.') }}

Mise à jour réussie !

{{ profileSuccessModal.message }}

Compte bloqué

Votre compte a été bloqué.

Contactez l'administrateur pour plus d'informations.

Erreur de connexion

Votre mot de passe ou votre identifiant est incorrect.

Veuillez vérifier vos identifiants et réessayer.

ARIA

Connexion

Accès sécurisé

Qui se connecte ?

C&N Solutions ANNULÉ CONFIRMÉ

Bonjour {{ clientRdv.civilite }} {{ clientRdv.nom }}

{{ new Date(clientRdv.date).getDate() }} {{ new Date(clientRdv.date).toLocaleDateString('fr-FR', {month:'short'}) }}
Votre Rendez-vous
{{ clientRdv.heure }}
{{ getBaseModele(clientRdv.modele) || clientRdv.modele }}

Un empêchement ?

Demande envoyée

Votre demande de {{ clientRdv.demandeClient.type }} est en cours de traitement par notre équipe.

Nous contacter

{{ clientRequest.type === 'report' ? 'Reporter le RDV' : 'Annuler le RDV' }}

Merci de nous indiquer la raison afin que nous puissions traiter votre demande rapidement.

ARIA

{{ user.name }}

{{ currentFullDateLabel }}

{{ currentTimeWithSeconds }}
Synchronisation Google Calendar... Sync... ({{ googleSyncModal.processed }}/{{ googleSyncModal.total }})
{{ googleSyncModal.processed }} modification{{ googleSyncModal.processed > 1 ? 's' : '' }} mise{{ googleSyncModal.processed > 1 ? 's' : '' }} à jour Rien détecté {{ googleSyncModal.processed }} modif{{ googleSyncModal.processed > 1 ? 's' : '' }} Rien
{{ conversionEmoji }}

Taux de conversion

{{ conversionRate }}%

Honorés / Total

💰

CA du jour

{{ formatPrice(adminStats.caDaily) }}

En temps réel

RDV & Mandats

Aujourd'hui {{ rdvPlacesStats.rdvAujourdhui }}
Cette Semaine {{ rdvPlacesStats.rdvCetteSemaine }}
Mandats {{ rdvPlacesStats.mandatsAujourdhui }}

Prévisionnel

Brut

{{ formatPrice((stats.caTTC || 0) + (stats.caPrevisionnelBrut || 0)) }}

Net

{{ formatPrice((stats.net || 0) + (stats.caPrevisionnelNet || 0)) }}

RDV & Mandats

Aujourd'hui {{ rdvPlacesStatsProspecteur.rdvAujourdhui }}
Cette Semaine {{ rdvPlacesStatsProspecteur.rdvCetteSemaine }}
Mandats {{ rdvPlacesStatsProspecteur.mandatsAujourdhui }}
{{ conversionEmoji }}

Taux de conversion

{{ conversionRate }}%

Honorés / Total

💰

CA du jour

{{ formatPrice(adminStats.caDaily) }}

En temps réel

RDV & Mandats

Aujourd'hui {{ rdvPlacesStats.rdvAujourdhui }}
Cette Semaine {{ rdvPlacesStats.rdvCetteSemaine }}
Mandats {{ rdvPlacesStats.mandatsAujourdhui }}

Prévisionnel

Brut

{{ formatPrice((stats.caTTC || 0) + (stats.caPrevisionnelBrut || 0)) }}

Net

{{ formatPrice((stats.net || 0) + (stats.caPrevisionnelNet || 0)) }}

Gains Prévisionnels

Total

{{ formatPrice((prospecteurStats.soldeTotal || 0) + (prospecteurPrevisionnel || 0)) }}

Actuel

{{ formatPrice(prospecteurStats.soldeTotal || 0) }}

✅

RDV Honorés

{{ stats.honored || 0 }}

{{ stats.honoredFactures || 0 }} facturés

Gains Totaux

Vos commissions et bonus

{{ formatPrice(prospecteurStats.soldeTotal || 0) }}
Solde Total

RDV Honorés

{{ stats.honored || 0 }}

{{ stats.honoredFactures || 0 }} facturés

Gain Moyen

{{ (stats.honored && stats.honored > 0) ? formatPrice((prospecteurStats.soldeTotal || 0) / stats.honored) : '0€' }}

Chiffre d'Affaires Total

Sur les RDV honorés uniquement

{{ formatPrice(stats.net || 0) }}
CA Net

RDV Honorés

{{ stats.honored || 0 }}

{{ stats.honoredFactures || 0 }} facturés

CA Moyen

{{ (stats.honored && stats.honored > 0) ? formatPrice((stats.net || 0) / stats.honored) : '0€' }}

Rendez-vous de {{ showingNextWeek ? 'la semaine prochaine' : 'cette semaine' }}

{{ showingNextWeek ? 'Semaine prochaine' : 'Cette semaine' }} : {{ totalWeekRdvs }} rendez-vous
{{ day.label }} {{ day.count }} {{ day.dayNumber }}

Statistiques par statut

{{ stats.upcoming }}

À venir

{{ stats.honored }}

Honorés

{{ stats.ko }}

KO

{{ stats.noshow }}

Pas venu

{{ stats.cancelled }}

Annulés

{{ stats.refused }}

Refusés

Objectif Mensuel

{{ new Date().toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' }) }}

{{ prospecteurStats.honoredCount || 0 }} / {{ userProfile.monthlyGoal }}
RDV honorés
{{ Math.round(((prospecteurStats.honoredCount || 0) / userProfile.monthlyGoal) * 100) }}%
{{ Math.max(0, userProfile.monthlyGoal - (prospecteurStats.honoredCount || 0)) }} RDV restants Gains NET si objectif atteint : {{ formatPrice(calculateGoalEarnings(userProfile.monthlyGoal)) }}

🎉 Objectif atteint ! Vos gains NETs prévus sont sécurisés.

Vous y êtes presque ! Encore quelques RDV pour sécuriser vos gains NETs.

Bonne progression ! Continuez pour atteindre vos gains NETs prévus.

Réponses reçues

{{ reply.prospectName }}

{{ reply.response }}

{{ formatDate(reply.createdAt) }}

{{ isTimelineTomorrow ? 'Rendez-vous Demain' : (timelineShowPassedToday ? 'Rendez-vous passés du jour' : 'Rendez-vous Aujourd\'hui') }}

{{ rdvTodayCount }} RDV
{{ rdv.heure }}
{{ rdv.civilite }} {{ rdv.nom }} OK M Nouveau Bientôt
{{ rdv.civilite }} {{ rdv.nom }} OK M Nouveau Bientôt 🎁 -{{ rdv.geste_commercial }}€
{{ getBaseModele(rdv.modele) || rdv.modele }} {{ rdv.source }} {{ getRelativeRdvLabel(rdv) }}
{{ getAgenceName(rdv.agenceId) }} {{ rdv.createdBy || 'Système' }}
Dans l'agenda
{{ getGoogleCalendarModification(rdv) }}
En cours
Votre rendez-vous sera statué par l'équipe Sera statué par l'équipe
STATUT ?
{{ displayStatus(rdv) }}

Rendez-vous en attente

Vos rendez-vous en attente de validation ou annulés

Aucun rendez-vous en attente

Tous vos rendez-vous ont été validés

{{ rdv.civilite }} {{ rdv.nom }}

Annulé En attente
Date : {{ formatDateFr(rdv.date) }} à {{ rdv.heure }}
Véhicule : {{ rdv.modele }}
Agence : {{ getAgenceName(rdv.agenceId) }}
Téléphone : {{ rdv.telephone }}

Motif d'annulation :

{{ rdv.motifAnnulation }}

Validation des rendez-vous

RDV en attente de validation ({{ rdvEnAttenteValidation.length }})

Connexion Google Calendar requise pour valider

Vous pouvez voir les rendez-vous en attente, mais vous devez être connecté à Google Calendar pour les valider.

Aucun rendez-vous en attente

Tous les rendez-vous ont été validés

{{ rdv.civilite }} {{ rdv.nom }}

Par {{ rdv.createdBy }}
Date : {{ formatDateFr(rdv.date) }} à {{ rdv.heure }}
Véhicule : {{ rdv.modele }}
Agence : {{ getAgenceName(rdv.agenceId) }}
Téléphone : {{ rdv.telephone }}
Cliquez pour voir tous les détails (lien véhicule, etc.)

Vérification de la connexion... Prêt à valider les rendez-vous

Demandes de retrait d'agenda

Demandes en attente ({{ agendaRetraitDemandes.length }})

Aucune demande en attente

Toutes les demandes ont été traitées

{{ demande.clientNom }}

Par {{ demande.prospecteur }}
Date : {{ formatDateFr(demande.rdvDate) }} à {{ demande.rdvHeure }}
Téléphone : {{ demande.clientTelephone }}
Demandé le : {{ formatDateFr(demande.createdAt.toISOString().split('T')[0]) }} à {{ demande.createdAt.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }) }}

Motif

{{ demande.motif }}

Agences

{{ user.role === 'admin' ? 'Gérez toutes vos agences' : 'Vos agences assignées' }}

Agences Prioritaires

{{ getAgencesPrioritaires().length }}

Ces agences nécessitent des rendez-vous à placer en priorité :

{{ index + 1 }} {{ agence.nom }} ({{ agence.restants }} RDV cette semaine)

Placement provisoire actif

Vous êtes temporairement affecté à {{ getPlacementProvisoireActif(user.id).agences.length }} agence{{ getPlacementProvisoireActif(user.id).agences.length > 1 ? 's' : '' }} pour la période du {{ formatDateFr(getPlacementProvisoireActif(user.id).dateDebut) }} au {{ formatDateFr(getPlacementProvisoireActif(user.id).dateFin) }}.

🎯 Concentrez-vous sur ces agences pour placer vos rendez-vous pendant cette période !

{{ user.role === 'admin' ? 'Aucune agence disponible' : 'Aucune agence assignée' }}

{{ agence.nom }}

COMPLÈTE

{{ agence.adresse }}

Progression {{ Math.round(getProgressionPourcentage(agence)) }}%

🤖 Semaine faible

{{ getRdvPlacesPourAgence(agence.id) === 0 ? 'Semaine vide !' : `Seulement ${getRdvPlacesPourAgence(agence.id)} RDV` }}

RDV à placer
{{ getRdvManquantsSemaine(agence) }}
Cette semaine

Tous les rendez-vous

Recherchez et gérez tous vos rendez-vous

{{ filteredList.length }} résultat{{ filteredList.length > 1 ? 's' : '' }}

Rendez-vous du {{ formatDateLong(listFilters.date) }}

{{ filteredList.length }} rendez-vous trouvé{{ filteredList.length > 1 ? 's' : '' }}

Explorez vos rendez-vous

Utilisez la barre de recherche ci-dessus ou les filtres rapides pour trouver vos rendez-vous.

Aucun rendez-vous trouvé

Essayez de modifier vos critères de recherche

{{ currentFilter === 'refused' ? 'RDV REFUSÉS' : 'Résultats de recherche' }}

{{ filteredList.length }} rendez-vous trouvé{{ filteredList.length > 1 ? 's' : '' }} {{ deplacedRdvsCount }} déplacé{{ deplacedRdvsCount > 1 ? 's' : '' }}
{{ formatDateShort(rdv.date) }} {{ rdv.heure }}
{{ rdv.civilite }} {{ rdv.nom }} OK M Nouveau Bientôt
{{ rdv.civilite }} {{ rdv.nom }} OK M Nouveau Bientôt 🎁 -{{ rdv.geste_commercial }}€
{{ getBaseModele(rdv.modele) || rdv.modele }} {{ rdv.telephone }} {{ rdv.source }} {{ getRelativeRdvLabel(rdv) }}
{{ getAgenceName(rdv.agenceId) }} {{ rdv.createdBy || 'Système' }}

Motif d'annulation :

{{ rdv.motifAnnulation }}

Dans l'agenda Agenda
Rendez-vous en cours En cours
Sera statué par l'équipe Sera statué
STATUT ?
{{ displayStatus(rdv) }}
{{ selectedIds.length }} sélectionné{{ selectedIds.length > 1 ? 's' : '' }}

Corbeille

{{ trashList.length }} éléments
Date Client Supprimé par Actions
{{ formatDateShort(rdv.date) }}
{{ rdv.nom }}
{{ getBaseModele(rdv.modele) || rdv.modele }}
Utilisateur
{{ formatDateShort(rdv.date) }}
{{ rdv.nom }}
{{ getBaseModele(rdv.modele) || rdv.modele }}
La corbeille est vide.
{{ selectedIds.length }} sélectionnés

Statuts à définir


Tous les statuts sont à jour !
{{ r.civilite }} {{ r.nom }} Terminé
{{ formatDateFr(r.date) }} à {{ r.heure }} • {{ r.modele }}
{{ getAgenceName(r.agenceId) }}

Important

Merci de placer des rendez-vous sur les agences prioritaires

{{ index + 1 }}
{{ agence.nom }} {{ agence.restants }} RDV à placer

Ces agences nécessitent des rendez-vous en priorité

Aucune agence prioritaire pour le moment. Vous pouvez placer des rendez-vous sur toutes les agences disponibles.

Nouveau Rendez-vous

Choisir l'Agence

Sélectionnez l'agence où se déroulera le rendez-vous

Aucune agence trouvée

Agences

Liste de toutes les agences avec lesquelles vous travaillez

Aucune agence disponible

{{ agence.nom }}

{{ agence.adresse }}

Semaine en cours
RDV placés
{{ getTotalRdvPlaces(agence) }}
À placer
{{ getTotalRdvManquants(agence) }}
Objectif: {{ agence.nbRdvParJour }} RDV/jour
{{ agence.statut_activite === 'pause' ? 'En pause' : 'Actif' }} Complète

Gestion des Agences

Suivi des objectifs de rendez-vous par agence

{{ agence.nom }}

Complète

{{ agence.adresse }}

Objectif par jour
{{ agence.nbRdvParJour || 'Non défini' }}
⚠️ Placer des rendez-vous sur cette agence - L'objectif n'est pas atteint !

Semaine actuelle

{{ jour.nom }}
{{ jour.rdvPlaces }}/{{ agence.nbRdvParJour || 0 }}
Place libérée après annulation Place disponible
La semaine en cours est complète, commencer à placer des rendez-vous pour la semaine suivante.
{{ jour.nom }}
{{ jour.rdvPlaces }}/{{ agence.nbRdvParJour || 0 }}

Aucune agence disponible

Informations Client

Renseignez les informations du client

✨ Client existant détecté !

Date & Heure

Sélectionnez la date et l'heure du rendez-vous

⚠️ Agence fermée

{{ getFermetureMessage(form.date, form.agence) || 'Cette agence est fermée à cette date.' }}

{{ formatDateForDisplay(form.date) }}
{{ getCreneauxRestantsPourDate(form.agence.id, form.date) > 0 ? 'Disponible' : (isDimancheFerme(form.agence, form.date) ? 'Agence fermée' : 'Complet') }}
{{ getCreneauxRestantsPourDate(form.agence.id, form.date) }}

Restant{{ getCreneauxRestantsPourDate(form.agence.id, form.date) > 1 ? 's' : '' }}

{{ countRdvForDay(form.agence.id, form.date) }}

Placé{{ countRdvForDay(form.agence.id, form.date) > 1 ? 's' : '' }}

{{ form.agence.nbRdvParJour }}

Objectif

Progression {{ Math.round((countRdvForDay(form.agence.id, form.date) / form.agence.nbRdvParJour) * 100) }}%

{{ isDimancheFerme(form.agence, form.date) ? 'Agence fermée' : 'Agence complète - Forcer le placement possible' }}

{{ getCreneauxRestantsPourDate(form.agence.id, form.date) }} créneau{{ getCreneauxRestantsPourDate(form.agence.id, form.date) > 1 ? 'x' : '' }} disponible{{ getCreneauxRestantsPourDate(form.agence.id, form.date) > 1 ? 's' : '' }}

Les créneaux horaires ne sont pas disponibles

Créneau complet

Maximum {{ form.agence.maxRdvParCreneau }} RDV à cette heure ({{ countRdvAtTime(form.agence.id, form.date, form.heure) }} déjà)

Agence complète

Cette agence est complète. Merci de ne plus placer de rendez-vous pour cette agence.

Maximum par jour atteint

{{ form.agence.nbRdvParJour }} rendez-vous sont déjà placés c'est le maximum pour l'agence. Merci de placer le rendez-vous à un autre créneau.

💡 Les RDV annulés ou "pas venu" libèrent automatiquement une place

Hors horaires

Ouverture : {{ getHorairesAgence(form.agence, form.date).heureOuverture }}
Fermeture : {{ getHorairesAgence(form.agence, form.date).heureFermeture }}
👆 Sélectionnez une date ci-dessus

Source du Rendez-vous

D'où provient ce rendez-vous ?

Mode de Contact

Comment le rendez-vous a-t-il été pris ?

Informations Véhicule

Renseignez les informations du véhicule

Le lien est obligatoire pour {{ form.source }}

Récapitulatif

Vérifiez les informations avant de confirmer

Agence
{{ form.agence?.nom }}
Client
{{ form.civilite }} {{ form.nom }}
Téléphone
{{ form.telephone }}
Véhicule
{{ getBaseModele(form.modele) || form.modele }}
Prix {{ formatPrice(form.prix) }}
Date & Heure
{{ formatDateFr(form.date) }} à
{{ form.heure }}
Source
{{ form.source }}
Mode de contact
{{ form.contactMode === 'message' ? 'Messages' : form.contactMode === 'telephone' ? 'Appel' : 'Non défini' }}
Lien de l'annonce Voir
Motif {{ form.motif === '__CUSTOM__' ? form.motifCustom : form.motif }}

Rendez-vous validés

Vos rendez-vous récemment validés

{{ honoredRdvNotificationsCount }} nouveau{{ honoredRdvNotificationsCount > 1 ? 'x' : '' }}

Aucun rendez-vous honoré

Vos rendez-vous validés apparaîtront ici

{{ notif.rdvNom || 'Client' }}

{{ formatDateFr(notif.rdvDate) }}

Date non disponible

Montant
+{{ formatPrice(notif.amountAdded || 0) }}

Rendez-vous libérés

Une place s'est libérée pour une de vos agences. Vous pouvez placer un nouveau rendez-vous à ce créneau ou à un autre créneau pour cette agence.

{{ rdvLiberesCount }} nouveau{{ rdvLiberesCount > 1 ? 'x' : '' }}

Aucun rendez-vous libéré

Les rendez-vous libérés apparaîtront ici

{{ rdvLib.agenceNom }}

Place libérée

Créneau libéré

{{ formatDateFr(rdvLib.date) }} à {{ rdvLib.heure }}

Une place s'est libérée pour cette agence

{{ Math.floor(getTempsRestantRdvLibere(rdvLib) / 60) }}:{{ String(getTempsRestantRdvLibere(rdvLib) % 60).padStart(2, '0') }} restant{{ getTempsRestantRdvLibere(rdvLib) > 60 ? 's' : '' }}

Ce créneau disparaîtra automatiquement dans {{ Math.floor(getTempsRestantRdvLibere(rdvLib) / 60) }} minute{{ Math.floor(getTempsRestantRdvLibere(rdvLib) / 60) > 1 ? 's' : '' }} si aucune action n'est effectuée.

Mon Portefeuille

Suivez vos gains et transactions

Solde du mois

{{ formatPrice(portefeuilleSolde) }}

{{ portefeuilleStats.rdvCount || 0 }} RDV honorés
{{ portefeuilleStats.bonusCount }} bonus
{{ portefeuilleStats.tipsCount }} pourboires

RDV Honorés

{{ portefeuilleStats.rdvCount || 0 }}

Gains RDV

{{ formatPrice(portefeuilleStats.rdvTotal || 0) }}

Bonus

{{ formatPrice(portefeuilleStats.bonusTotal || 0) }}

Pourboires

{{ formatPrice(portefeuilleStats.tipsTotal || 0) }}

Transactions

Aucune transaction

Vos transactions apparaîtront ici

{{ transaction.label || 'Transaction' }}

{{ getRdvFromTransaction(transaction.rdvId).civilite }} {{ getRdvFromTransaction(transaction.rdvId).nom }} {{ getAgencyName(transaction.agenceId) }} {{ formatTransactionDate(transaction.date) }}
{{ transaction.type === 'pourboire' ? 'Pourboire' : 'Bonus' }}

+{{ formatPrice(transaction.amount || 0) }}

Messages Importants

Historique complet de tous les messages envoyés par l'administrateur

Aucun message

Les messages de l'administrateur apparaîtront ici

C&N Solutions

{{ formatDateLong(message.createdAt) }} {{ formatTime(message.createdAt) }}
Non lu Lu Pris en compte Pris en compte le {{ formatDateLong(message.acknowledgedAt) }}

Portefeuille des Prospecteurs

Sélectionnez un prospecteur pour voir son portefeuille

{{ prospecteur.name.charAt(0).toUpperCase() }}

{{ prospecteur.name }}

{{ formatPrice(getProspecteurSoldeNet(prospecteur.name)) }}
NET

Cliquez pour voir

Aucun prospecteur trouvé

Essayez avec un autre terme de recherche

{{ portefeuilleAdminModal.selectedProspecteur.name.charAt(0).toUpperCase() }}

{{ portefeuilleAdminModal.selectedProspecteur.name }}

{{ portefeuilleAdminModal.selectedProspecteur.email || 'Pas d\'email' }}

{{ portefeuilleAdminModal.mois && portefeuilleAdminModal.annee ? `Solde ${new Date(portefeuilleAdminModal.annee, portefeuilleAdminModal.mois - 1).toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' })}` : 'Solde du mois en cours' }}
{{ formatPrice(getProspecteurSoldeNet(portefeuilleAdminModal.selectedProspecteur.name, portefeuilleAdminModal.mois || new Date().getMonth() + 1, portefeuilleAdminModal.annee || new Date().getFullYear())) }}
NET
Solde du mois précédent (à payer ce mois)
{{ (() => { const prevMonth = portefeuilleAdminModal.mois === 1 ? 12 : portefeuilleAdminModal.mois - 1; const prevYear = portefeuilleAdminModal.mois === 1 ? portefeuilleAdminModal.annee - 1 : portefeuilleAdminModal.annee; return new Date(prevYear, prevMonth - 1).toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' }); })() }}
{{ formatPrice(getProspecteurSoldeNet(portefeuilleAdminModal.selectedProspecteur.name, (portefeuilleAdminModal.mois - 1) || 12, portefeuilleAdminModal.mois === 1 ? portefeuilleAdminModal.annee - 1 : portefeuilleAdminModal.annee)) }}
Total NET (mois en cours + mois précédent)
{{ formatPrice(getProspecteurSoldeNet(portefeuilleAdminModal.selectedProspecteur.name, portefeuilleAdminModal.mois, portefeuilleAdminModal.annee) + getProspecteurSoldeNet(portefeuilleAdminModal.selectedProspecteur.name, (portefeuilleAdminModal.mois - 1) || 12, portefeuilleAdminModal.mois === 1 ? portefeuilleAdminModal.annee - 1 : portefeuilleAdminModal.annee)) }}

Transactions

Aucune transaction

Les transactions apparaîtront ici

{{ transaction.label || 'Transaction' }}

Masquée Pourboire Bonus

{{ formatTransactionDate(transaction.date) }}

{{ getRdvFromTransaction(transaction.rdvId).civilite }} {{ getRdvFromTransaction(transaction.rdvId).nom }}

+{{ formatPrice(transaction.amount || 0) }}

Ajouter un pourboire

{{ addPourboireModal.prospecteur?.name }}

Transaction programmée pour le mois prochain

Bilan & Facturation

Chiffre d'affaires

CA HT
{{ formatBilanPrice(bilanStats.ht) }}€
{{ bilanStats.rdv }} RDV
TVA Collectée
{{ formatBilanPrice(bilanStats.tva) }}€
{{ bilanConfig.tvaRate }}%
Total TTC
{{ formatBilanPrice(bilanStats.ttc) }}€
Toutes taxes comprises

À verser prospecteurs

Montant HT
{{ formatBilanPrice(bilanTotauxAVerser) }}€
Montant TTC
{{ formatBilanPrice(bilanTotauxAVerser + (bilanTotauxAVerser * bilanConfig.tvaRate / 100)) }}€

Ce qui reste

Après avoir payé les prospecteurs, voici ce qui reste dans la poche C&N

Montant HT
{{ formatBilanPrice(bilanStats.ht - bilanTotauxAVerser) }}€
Montant TTC
{{ formatBilanPrice(bilanStats.ttc - bilanTotauxAVerser) }}€

Ajouter des RDV facturés

Date Agence RDV Tarif HT TVA Total Actions
{{ formatBilanDate(r.periodDate || r.date) }}
{{ r.agence }}
{{ r.commercial }}
{{ r.rdv }} {{ formatBilanPrice(getBilanLineVals(r).prixUnitaire) }}€ {{ formatBilanPrice(getBilanLineVals(r).ht) }}€ {{ formatBilanPrice(getBilanLineVals(r).tva) }}€
{{ formatBilanPrice(bilanConfig.tvaActive ? getBilanLineVals(r).ttc : getBilanLineVals(r).ht) }}€
REPORTÉ

Aucun RDV facturé

Sélectionner tout
{{ r.agence }}
{{ formatBilanDate(r.periodDate || r.date) }}
{{ r.commercial }}
{{ r.rdv }} RDV
{{ formatBilanPrice(bilanConfig.tvaActive ? getBilanLineVals(r).ttc : getBilanLineVals(r).ht) }}€
REPORTÉ

Aucun RDV facturé

Page {{ bilanCurrentPage }} / {{ bilanTotalPages }}

À traiter urgent

RDV honorés nécessitant l'assignation d'un commercial. Vérifiez l'agenda Google Calendar du professionnel pour identifier le commercial.

Date Agence Client Téléphone Voir Agenda Actions
{{ formatBilanDate(r.date) }} {{ r.agence }} {{ getUrgentRdvClient(r) }} {{ getUrgentRdvPhone(r) }} Voir Agenda N/A

Aucun RDV urgent à traiter

Objectifs par Agence / Commercial

{{ agStat.agenceNom }}

Total RDV: {{ agStat.totalRdv }}
Objectif: {{ agStat.objectifAgence }}
{{ comm.nom || 'Agence (Direct)' }}
RDV: {{ comm.rdv }}
Objectif: {{ comm.objectif }}
Progression
{{ getObjectifProgressPercent(comm.rdv, comm.objectif) }}%
{{ comm.rdv >= comm.objectif ? 'Objectif atteint' : 'En cours' }}

Aucun commercial dans cette agence

Aucune donnée disponible

Définissez des objectifs pour commencer

Réception de paiement

Gérez l'envoi des réceptions de paiement mensuelles aux agences.

Réception de paiement du mois précédent

Mois facturé : {{ invoiceData.monthName }} {{ invoiceData.year }}

Date de génération : {{ invoiceData.generationDate }}

{{ agence.nom }}

Email envoyé

{{ agence.email }}

Aucun email configuré pour cette agence

Envoyé le {{ formatDateFr(agence.emailSentDate || (invoiceData && invoiceSent[`${agence.id}_${invoiceData.month}_${invoiceData.year}`]?.date)) }}

Total TTC : {{ formatBilanPrice(agence.totalTTC) }} €
Total HT : {{ formatBilanPrice(agence.totalHT) }} €
Nombre de RDV : {{ agence.nbRdv }}

Aucune agence ne correspond à votre recherche.

Aucune donnée de facturation disponible pour le mois précédent.

Mes documents

Conseils de prospection

Si un prospect vous dit qu'il a déjà été contacté

Si lors d'un appel, la personne vous indique qu'elle a déjà été contactée par l'un de vos collègues, répondez de cette manière :

"D'accord, ce sont donc mes collègues qui vous ont contacté. Avez-vous pu prendre rendez-vous ? En effet, nous sommes actuellement à la recherche de ce véhicule, ce qui explique pourquoi vous avez déjà été contacté."

Cette réponse permet de maintenir une conversation cohérente et de vérifier si un rendez-vous a déjà été pris.

Aucun document disponible

{{ script.name }}

{{ formatDateFr(script.createdAt) }}

Mise à jour réussie !

{{ profileSuccessModal.message }}

Mon objectif

Planifiez et suivez votre objectif mensuel de rendez-vous

Objectif du mois en cours

{{ new Date().toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' }) }}

Objectif mensuel

{{ userProfile.monthlyGoal || 0 }}

RDV à honorer

Progression

{{ prospecteurStats.honoredCount || 0 }} / {{ userProfile.monthlyGoal || 0 }}

RDV honorés

{{ Math.round(((prospecteurStats.honoredCount || 0) / Math.max(1, userProfile.monthlyGoal || 1)) * 100) }}%

RDV restants

{{ Math.max(0, (userProfile.monthlyGoal || 0) - (prospecteurStats.honoredCount || 0)) }}

Gains NET si objectif atteint {{ formatPrice(calculateGoalEarnings(userProfile.monthlyGoal)) }}

Basé sur {{ userProfile.monthlyGoal }} RDV honorés × {{ formatPrice(getBaseCommission()) }} par RDV + bonus de paliers

Gains NET si objectif atteint {{ formatPrice(calculateGoalEarnings(tempMonthlyGoal)) }}

Basé sur {{ tempMonthlyGoal }} RDV honorés × {{ formatPrice(getBaseCommission()) }} par RDV + bonus de paliers

Objectifs des prospecteurs

Visualisez les objectifs mensuels et l'avancement de chaque prospecteur.

{{ p.name }}

Objectif mensuel défini par le prospecteur

Objectif

{{ p.monthlyGoal || 0 }} RDV

Réalisé

{{ p.honoredCount || 0 }} RDV

Progression {{ Math.round(((p.honoredCount || 0) / Math.max(1, (p.monthlyGoal || 1)) ) * 100) }}%

CA généré ce mois : {{ formatPrice(p.ca || 0) }}

Gains NET si objectif atteint : {{ formatPrice(calculateGoalEarningsForProspecteur(p.monthlyGoal, p.name)) }}

À traiter urgent

RDV honorés nécessitant l'assignation d'un commercial. Vérifiez l'agenda Google Calendar du professionnel pour identifier le commercial.

Date Agence Client Téléphone Voir Agenda Actions
{{ formatBilanDate(r.date) }} {{ r.agence }} {{ getUrgentRdvClient(r) }} {{ getUrgentRdvPhone(r) }} Voir Agenda N/A

Aucun RDV urgent à traiter

Team

Photo {{ (prosp.name || '').charAt(0).toUpperCase() }}

{{ prosp.name }}

{{ prosp.email || '' }}

Connexions
{{ getProspecteurConnexionsCount(prosp.name) }}
RDV à venir
{{ getProspecteurUpcomingRdvs(prosp.name) }}
Prévisionnel {{ equipeFilters.mois && equipeFilters.annee ? '(' + getMonthLabel(equipeFilters.mois, equipeFilters.annee) + ')' : '(mois actuel)' }}
{{ formatPrice(getProspecteurPrevisionnel(prosp.name)) }}
Gain
{{ formatPrice(getProspecteurGain(prosp.name)) }}
Entreprise
{{ formatPrice(getProspecteurGainEntreprise(prosp.name)) }}

Aucun prospecteur trouvé

Emplacement des prospecteurs

Gérez la répartition et les rotations automatiques

Total agences
{{ agences.length }}
Total prospecteurs
{{ teamList.filter(m => m.role !== 'admin').length }}
Rotation activée
Rotation tous les
{{ placementConfig.rotationDays }}j

Actions rapides

Configuration de la rotation automatique

Analyse des performances

{{ longStayAlerts.length }} prospecteur{{ longStayAlerts.length > 1 ? 's' : '' }}
{{ alert.prospecteurName.charAt(0).toUpperCase() }}
{{ alert.prospecteurName }}
{{ alert.agenceNom }} • Depuis {{ alert.days }} jour{{ alert.days > 1 ? 's' : '' }}
Total RDV
{{ alert.stats.totalRdv }}
Honorés
{{ alert.stats.honoredRdv }}
Taux conversion
{{ alert.stats.conversionRate.toFixed(1) }}%
RDV/jour
{{ alert.stats.placementRate.toFixed(2) }}
Efficacité
{{ alert.stats.efficiency.toFixed(1) }}
Depuis
{{ alert.stats.daysSinceAssignment }}j
{{ alert.adviceText }}
Agence difficile (taux global: {{ alert.agencyStats.globalConversionRate.toFixed(1) }}%)
Agences suggérées :

Suggestions de rééquilibrage

{{ rebalanceSuggestions.length }} suggestion{{ rebalanceSuggestions.length > 1 ? 's' : '' }}
{{ suggestion.prospecteur }}
{{ suggestion.currentAgency }} {{ suggestion.targetAgency }} ({{ suggestion.currentCount }} → {{ suggestion.targetCount }})

Répartition par agence

{{ filteredPlacementAgencies.length }} agence{{ filteredPlacementAgencies.length > 1 ? 's' : '' }}

Gestion des agences de rotation par prospecteur

Sélectionnez les agences sur lesquelles chaque prospecteur doit tourner. La rotation se fera uniquement entre ces agences.

Aucun prospecteur trouvé

{{ prospecteur.name.charAt(0).toUpperCase() }}
{{ prospecteur.name }}
{{ (prospecteur.rotationAgencies || []).length }} agence{{ (prospecteur.rotationAgencies || []).length > 1 ? 's' : '' }} de rotation configurée{{ (prospecteur.rotationAgencies || []).length > 1 ? 's' : '' }}
{{ getAgenceName(agencyId) }}
Aucune agence de rotation configurée

Suivi des connexions

Surveillance en temps réel des utilisateurs connectés

Connectés
{{ connectedUsers.length }}

Aucun utilisateur connecté

Les utilisateurs connectés apparaîtront ici en temps réel

{{ user.name.charAt(0).toUpperCase() }}
{{ user.name }}
Connecté depuis {{ user.connecteDepuis }}
En ligne
{{ user.heureConnexion }}
Page actuelle
{{ user.currentPage }}
Action en cours
{{ user.currentAction }}
Aucune activité enregistrée

{{ view==='rappels' ? 'Rappels à effectuer' : view==='deplaces' ? 'Rendez-vous déplacés depuis Google Agenda' : view==='update_agenda' ? 'Mise à jour Agenda' : 'Rendez-vous à confirmer' }}

Ces rendez-vous ont été déplacés directement dans Google Agenda et nécessitent une validation


Aucun rendez-vous déplacé depuis Google Agenda Tout est à jour !
{{ r.civilite }} {{ r.nom }}
Déplacé par : {{ getAgenceQuiADeplace(r) }}
Détails du déplacement

{{ r.motifDeplacement }}

Ancienne date : {{ formatDateFr(r.oldDate) }} à {{ r.oldHeure || '--:--' }}
{{ formatDateFr(r.date) }} • {{ r.heure }} • {{ r.modele }}
{{ getAgenceName(r.agenceId) }}
{{ r.createdBy }}
Envoyer le report Report

Historique des SMS envoyés

{{ sms.type === 'rappel' ? 'Rappel' : 'Confirmation' }} {{ sms.sentAt ? new Date(sms.sentAt).toLocaleString('fr-FR') : '' }}
Téléphone: {{ sms.phone }}
{{ sms.message }}
Envoyé par: {{ sms.sentBy }} • Agence: {{ getAgenceName(sms.agenceId) }}

SMS

Historique et gestion des messages

Total

{{ filteredSmsHistory.length }}

Envoyés

{{ filteredSmsHistory.filter(s => !s.error).length }}

Erreurs

{{ smsErrorCount }}

Rappels

{{ filteredSmsHistory.filter(s => s.type === 'rappel').length }}

Erreurs ({{ smsErrors.length }})

{{ sms.type === 'rappel' ? 'Rappel' : sms.type === 'reschedule' ? 'Report' : 'Confirmation' }} {{ sms.sentAt ? new Date(sms.sentAt).toLocaleString('fr-FR', { dateStyle: 'short', timeStyle: 'short' }) : 'Non envoyé' }}

Téléphone: {{ sms.phone }}

{{ sms.message }}

Erreur: {{ sms.errorMessage }}

{{ getAgenceName(sms.agenceId) }} • {{ sms.retryCount }} tentative(s)

Historique ({{ filteredSmsHistory.filter(s => !s.error).length }})

Aucun SMS trouvé

{{ sms.type === 'rappel' ? 'Rappel' : sms.type === 'reschedule' ? 'Report' : 'Confirmation' }} {{ sms.sentAt ? new Date(sms.sentAt).toLocaleString('fr-FR', { dateStyle: 'short', timeStyle: 'short' }) : '' }}

Téléphone: {{ sms.phone }}

{{ sms.message }}

{{ sms.sentBy }} {{ getAgenceName(sms.agenceId) }}

{{ messagePreviewModal.title }}

{{ messagePreviewModal.message }}

Message important

Destinataire

Ce message apparaîtra dans l'onglet “Message important” du ou des prospecteurs concernés.

Confirmation

Votre message a bien été enregistré

Les paramètres des messages saisonniers ont été sauvegardés avec succès.

Confirmation

Votre modification a bien été prise en compte

Les paramètres du message SMS ont été sauvegardés avec succès.

{{ clientModal.rdv.civilite === 'M.' ? 'M' : 'F' }}

{{ clientModal.rdv.civilite }} {{ clientModal.rdv.nom }}

{{ displayStatus(clientModal.rdv) }} {{ clientModal.rdv.telephone }}
Geste Commercial
-{{ formatPrice(clientModal.rdv.geste_commercial) }}
Véhicule
{{ getBaseModele(clientModal.rdv.modele) }}
{{ clientModal.rdv.modele || 'Non spécifié' }}
Lien annonce
Source
{{ clientModal.rdv.source || 'N/A' }}
Agence
{{ getAgenceName(clientModal.rdv.agenceId) || 'N/A' }}
Créé par
{{ clientModal.rdv.createdBy || 'Système' }}
Date & Heure
{{ formatDateFr(clientModal.rdv.date) }} à {{ clientModal.rdv.heure }}
Actions Rapides
Motif

{{ clientModal.rdv.motifVente }}

Aucun

Créé le {{ formatDateFr(getCreatedDate(clientModal.rdv)) }} à {{ getCreatedTime(clientModal.rdv) }}
Par {{ clientModal.rdv.createdBy }}

Historique & Notes

{{ clientModal.rdv.createdBy || 'Système' }}
{{ getCreatedDate(clientModal.rdv.created) }} {{ getCreatedTime(clientModal.rdv.created) }}
{{ clientModal.rdv.note }}

Aucun historique

{{ n.author || 'Système' }}
{{ n.date ? (new Date(n.date).toLocaleDateString('fr-FR', {day:'2-digit', month:'short'}) + ' ' + new Date(n.date).toLocaleTimeString('fr-FR', {hour:'2-digit', minute:'2-digit'})) : '' }}
{{ n.text }}

Rendez-vous à ajouter à l'agenda

{{ rdvsToAdd.length }} rendez-vous disponible{{ rdvsToAdd.length > 1 ? 's' : '' }}

Cochez les rendez-vous que vous souhaitez ajouter à l'agenda. Les rendez-vous non cochés seront marqués comme rejetés et ne seront plus jamais proposés.

{{ rdv.civilite }} {{ rdv.nom }}
{{ formatDateFr(rdv.date) }} à {{ rdv.heure }} • {{ getAgenceName(rdv.agenceId) }}
Statut: {{ rdv.statut === 'confirme' ? 'CONFIRMÉ' : rdv.statut === 'honore' ? 'HONORÉ' : rdv.statut === 'pas_venu' ? 'PAS VENU' : rdv.statut === 'annule' ? 'ANNULÉ' : 'EN ATTENTE' }} {{ rdv.modele }}
{{ selectedRdvsToAddInModal.length }} sur {{ rdvsToAdd.length }} sélectionné{{ selectedRdvsToAddInModal.length > 1 ? 's' : '' }}

Geste Commercial

Réduction exceptionnelle

Prix du rendez-vous

{{ formatPrice(getRdvPriceForDiscount()) }}

Réduction

{{ formatPrice(getRdvPriceForDiscount() * 0.5) }}

Nouveau prix

{{ formatPrice(getRdvPriceForDiscount() * 0.5) }}

Prix du rendez-vous

{{ formatPrice(getRdvPriceForDiscount()) }}

Réduction

{{ formatPrice(discountModal.amount || 0) }}

Nouveau prix

{{ formatPrice(Math.max(0, getRdvPriceForDiscount() - (discountModal.amount || 0))) }}

{{ discountModal.error }}

Statistiques RDV Placés & Mandats

Détails par période

RDV Placés

Rendez-vous créés

Aujourd'hui
{{ rdvPlacesStatsDetail.rdvAujourdhui }}
RDV créés aujourd'hui
Cette Semaine
{{ rdvPlacesStatsDetail.rdvCetteSemaine }}
Depuis lundi
{{ getMonthLabel(rdvPlacesModal.selectedMonth, rdvPlacesModal.selectedYear) }}
{{ rdvPlacesStatsDetail.rdvMois }}
RDV créés ce mois

RDV Honorés

Rendez-vous honorés

Aujourd'hui
{{ rdvPlacesStatsDetail.rdvHonoresAujourdhui }}
RDV honorés aujourd'hui
Cette Semaine
{{ rdvPlacesStatsDetail.rdvHonoresCetteSemaine }}
Depuis lundi
{{ getMonthLabel(rdvPlacesModal.selectedMonth, rdvPlacesModal.selectedYear) }}
{{ rdvPlacesStatsDetail.rdvHonoresMois }}
RDV honorés ce mois

Mandats Signés

RDV honorés avec mandat (OK M)

Aujourd'hui
{{ rdvPlacesStatsDetail.mandatsAujourdhui }}
Mandats signés aujourd'hui
Cette Semaine
{{ rdvPlacesStatsDetail.mandatsCetteSemaine }}
Depuis lundi
{{ getMonthLabel(rdvPlacesModal.selectedMonth, rdvPlacesModal.selectedYear) }}
{{ rdvPlacesStatsDetail.mandatsMois }}
Mandats signés ce mois

Taux de Présence

Mandats signés / RDV honorés

{{ getMonthLabel(rdvPlacesModal.selectedMonth, rdvPlacesModal.selectedYear) }}
{{ rdvPlacesStatsDetail.tauxTransformationMois }}%
{{ rdvPlacesStatsDetail.mandatsMois }} mandats / {{ rdvPlacesStatsDetail.rdvHonoresMois }} RDV honorés

Gestion Pourboire

{{ user.name }}

{{ tipModal.error }}

Rappel envoyé

Le message a-t-il bien été envoyé ?

Confirmez que le rappel a bien été envoyé au client

Confirmation envoyée

Le message a-t-il bien été envoyé ?

Confirmez que la confirmation a bien été envoyée au client

{{ quickRdvModal.isReplacement ? 'Replacer le rendez-vous' : 'Ajouter RDV rapide' }}

{{ quickRdvModal.isReplacement ? 'Créer un nouveau rendez-vous avec les mêmes informations' : 'Créer un rendez-vous rapidement' }}

Aucune agence disponible

Comment le rendez-vous a-t-il été pris ?

Statuts à définir

Vous avez {{ pendingStatusCount }} rendez-vous où il faut mettre un statut.

Statut obligatoire

Rendez-vous terminé

Le rendez-vous de {{ statusRequiredModal.rdv.civilite }} {{ statusRequiredModal.rdv.nom }} est terminé.

Vous devez définir le statut du rendez-vous.

Votre rendez-vous sera statué par l'équipe

L'équipe va définir le statut de ce rendez-vous. Vous n'avez aucune action à effectuer.

Rappels en attente

Vous avez {{ rappelsVeilleCount }} pour Demain et {{ rappelsJourCount }} pour Aujourd'hui.

Message global

Ce message s'affichera en grand pour tous les prospecteurs (connectés ou à la prochaine connexion).

Historique des messages globaux

Aucun message global envoyé

Envoyé le {{ msg.createdAt ? formatDateLong(msg.createdAt.toISOString().split('T')[0]) : 'Date inconnue' }} par {{ msg.createdBy }}

{{ msg.message }}

Vus par :

{{ userId }} ({{ response.timestamp ? formatDate(new Date(response.timestamp.toDate ? response.timestamp.toDate() : response.timestamp)) : '' }})

Aucune réponse pour le moment

{{ currentAdminMessage.title || 'Message de l\'administrateur' }}

{{ currentAdminMessage.message }}

📊 Statistiques Détaillées

Total Placé

{{ detailedStats.total }}

RDV ce mois

Honorés

{{ detailedStats.honored }}

RDV honorés

Pas Venu

{{ detailedStats.noshow }}

No-show

Taux Présence

{{ detailedStats.rate }}%

Taux de présence

Mode de contact

Répartition des rendez-vous par mode de contact

Par Messages
{{ contactModeStats.parMessage }}
RDV placés
{{ contactModeStats.pourcentageMessage }}%
Par Appel
{{ contactModeStats.parTelephone }}
RDV placés
{{ contactModeStats.pourcentageTelephone }}%

{{ contactModeStats.sansMode }} rendez-vous sans mode de contact enregistré

Mandats signés par Agence

Basé sur les RDV honorés uniquement - {{ statsModalSelectedPeriod }}

{{ stat.nom || 'Sans agence' }}
{{ stat.total > 0 ? Math.round((stat.mandatsSignes / stat.total) * 100) : 0 }}% de mandats
Total RDV Honorés
{{ stat.total }}
RDV honorés ce mois
Mandats signés
{{ stat.mandatsSignes }}
Avec mandat OK M

Aucune donnée pour ce mois

Historique des Actions (100 dernières)

{{ log.user }} {{ new Date(log.timestamp).toLocaleString('fr-FR') }}
{{ log.action }} - {{ log.details.client }} ({{ log.details.motif }})

Statistiques Avancées

Période : {{ new Date().toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' }) }}

Mois en cours
Taux Conversion
{{ statsModalData.tauxConversion }}%
RDV honorés / Total RDV
Basé sur {{ statsModalData.totalRdv }} RDV
Taux Annulation
{{ statsModalData.tauxAnnulation }}%
RDV annulés / Total RDV
Sur {{ statsModalData.totalRdv }} RDV total
Taux No-Show
{{ statsModalData.tauxNoShow }}%
Client absent / Total RDV
Sur {{ statsModalData.totalRdv }} RDV total
CA Moyen / RDV
{{ statsModalData.caMoyenParRdv }}€
Par RDV honoré
Sur {{ statsModalData.honored }} RDV honorés

CA par Jour de la Semaine

Répartition du CA selon les jours

{{ ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'][jour] }}
{{ formatPrice(ca) }}
CA généré
{{ ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'][jour] }}
{{ ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'][jour] }}
CA généré
{{ formatPrice(ca) }}

Performance par Source

CA généré par source de prospection

{{ source || 'Non renseigné' }}
{{ formatPrice(stat.ca) }}
{{ stat.count }} RDV honorés
CA moyen: {{ formatPrice(stat.count > 0 ? (stat.ca / stat.count) : 0) }}

Performance par Agence

Basé sur les RDV honorés avec mandat signé

{{ agence || 'Sans agence' }}
{{ formatPrice(stat.ca) }}
{{ stat.count }} RDV honorés

Performance par Commercial

Période : {{ new Date().toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' }) }}

{{ commercial }}
{{ formatPrice(perf.ca) }}
{{ perf.count }} RDV honorés
CA moyen: {{ formatPrice(perf.count > 0 ? (perf.ca / perf.count) : 0) }}

Réglages d'envoi automatique

Configuration des envois mensuels

Envoi automatique mensuel

Envoyer automatiquement le bilan le 1er de chaque mois à 8h

Agences concernées

Les emails seront envoyés automatiquement le {{ statsAutoSendDay }} de chaque mois à {{ String(statsAutoSendHour).padStart(2, '0') }}h{{ String(statsAutoSendMinute).padStart(2, '0') }} pour les agences sélectionnées.

Ce bouton envoie les emails immédiatement sans vérifier l'heure

Confirmation d'envoi

Récapitulatif avant envoi

Destinataire

{{ statsEmailConfirmModal.selectedAgency.nom }}

{{ statsEmailConfirmModal.selectedAgency.email }}

Période

{{ statsEmailConfirmModal.pdfData.monthLabel }} {{ statsEmailConfirmModal.pdfData.year }}

Statistiques

Total Placé

{{ statsEmailConfirmModal.pdfData.totalPlaces }}

Honorés

{{ statsEmailConfirmModal.pdfData.totalHonores }}

Taux de Présence

{{ statsEmailConfirmModal.pdfData.rate }}%

Mandats Signés

{{ statsEmailConfirmModal.pdfData.totalMandatsSignes }}

Modifier Membre

Agences Attribuées

Agences assignées

{{ agenciesViewModal.member?.name }}

{{ (agenciesViewModal.member?.assignedAgencies || []).length }} agence{{ (agenciesViewModal.member?.assignedAgencies || []).length > 1 ? 's' : '' }}

{{ agences.find(a => a.id === agencyId)?.nom || 'Agence inconnue' }}

{{ agences.find(a => a.id === agencyId)?.adresse }}

Aucune agence assignée

Modifier le mot de passe

{{ passwordEditModal.member?.name }}

{{ customConfirmModal.title }}

{{ customConfirmModal.message }}

Modifier la note

Modifier le nom d'administrateur

{{ editAdminNameModal.oldName }}

Réglages Paramètres

Configuration de l'application

Choisissez une section

Gérez tous les paramètres de votre application

Salaire & Bonus

Ce tarif sera automatiquement appliqué lors de la création d'un nouveau prospecteur. Il peut être personnalisé individuellement par la suite.

Logique Palier Récurrent

À partir de RDV, ajouter € tous les RDV suivants.

Exemple: À partir de 21 RDV, tous les 10 RDV = 100€. 21 RDV = +100€, 31 RDV = +200€, 41 RDV = +300€...

Les paliers sont désactivés. Seul le salaire de base sera appliqué.

Tarifs Personnalisés par Prospecteur

Définissez un tarif spécifique par RDV honoré pour chaque prospecteur.

{{ member.name }}

{{ member.email }}

Tarif par défaut: {{ globalCommission.base || 10 }}€

Aucun prospecteur trouvé

Ajouter un Prospecteur

Tarif par défaut: {{ globalCommission.base || 10 }}€ (vous pouvez le personnaliser)

Agences Attribuées (pour le nouveau membre) *

Contrôle des Statuts de Rendez-vous

Si désactivé, seuls les administrateurs pourront modifier les statuts des rendez-vous (Honorer, KO, Pas venu, Annuler)

CivilitéNomIdentifiantAgencesStatutActions
{{ member.civility || '-' }}
{{ member.name }} {{ member.email }}BloquéActif
Aucune agence trouvée

{{ editingAgency.id ? 'Modifier' : 'Nouvelle' }} Agence

{{ ((editingAgency && editingAgency.nomExpediteur) || '').length }}/11

Ce nom apparaîtra sur le téléphone des destinataires lors de l'envoi des messages de confirmation automatique. Maximum 11 caractères. Si vide, le numéro 38601 sera utilisé par défaut.

Numéro de téléphone pour recevoir les demandes de validation d'agence par SMS.

Adresse email pour recevoir les factures et notifications.

Le décalage horaire sera automatiquement appliqué pour les heures d'ouverture et les vérifications.

Ex: +3 pour 3 heures d'avance, -5 pour 5 heures de retard

Décalage actuel: +{{ editingAgency.timezoneOffset }}h

Heure locale agence: {{ getAgencyLocalTime(editingAgency.timezoneOffset) }}

Si coché, les boutons d'envoi de SMS seront masqués lors de la création de rendez-vous et des reports pour cette agence. L'agence s'occupera d'envoyer les SMS.

Entrez l'adresse email de la personne qui partage son agenda Google avec vous. Si vide, l'agenda principal sera utilisé par défaut.

{{ color }}

Choisissez la couleur des événements dans Google Calendar

Définissez les horaires d'ouverture et de fermeture pour chaque jour de la semaine. Cochez la case pour indiquer que le jour est ouvert.

{{ dayName }}

Définissez une heure à partir de laquelle l'agence ne prend plus de rendez-vous exceptionnellement (ex: 17h en hiver car il fait nuit tôt)

Définissez l'heure à partir de laquelle les RDV terminés passent automatiquement en 'Statut à définir' (ex: 19:00 pour Metz). Par défaut: 19:00

Prix Affiché (TTC){{ formatPrice(editingAgency.prix) }}

Définissez des dates précises où l'agence sera fermée. Aucun rendez-vous ne pourra être pris ces jours-là.

Fermeture enregistrée

Si l'agence a des commerciaux, ils seront demandés lors de l'honorisation des RDV. Si vide, les RDV seront automatiquement ajoutés au Bilan.

Configurez les notifications automatiques pour les rendez-vous de cette agence. Les notifications seront planifiées dans l'agenda Google Calendar.

Simulation d'envoi SMS

Testez l'envoi de SMS pour voir comment les clients reçoivent les messages. Le SMS sera envoyé au numéro que vous indiquez.

Numéro qui recevra le SMS de test (ex: numéro du gérant)

Aperçu du message :

{{ getSmsTestPreview().length }} / 147 caractères
{{ getSmsTestPreview() }}

⚠️ Le message dépasse 147 caractères et sera envoyé en plusieurs SMS

{{ smsTestResult.message }}

Configuration Globale

Collez l'adresse de votre image (clic droit > copier l'adresse de l'image) et validez.

Configuration des Rappels SMS

Avant cette heure, pas d'alerte pour les RDV d'aujourd'hui.

Heure à laquelle les SMS de rappel seront envoyés automatiquement la veille du rendez-vous.

Heure à laquelle les SMS de rappel seront envoyés automatiquement le jour même du rendez-vous (si créé la veille).

Après combien d'heures après la fin du rendez-vous le statut devient obligatoire.

URL de base pour générer les liens clients (ex: https://votresite.com). Si vide, utilise l'URL actuelle.

Gérer les Noms d'Administrateurs

{{ name }}
Aucune agence trouvée

{{ excludeAgenciesForCopy.length }} agence{{ excludeAgenciesForCopy.length > 1 ? 's' : '' }} exclue{{ excludeAgenciesForCopy.length > 1 ? 's' : '' }}

{{ editingMsgAgence.nom }}

Aperçu (avec message de fête si applicable)

{{ getMessagePreview(editingMsgAgence, editingMsgType).length }} / 147 caractères
{{ getMessagePreview(editingMsgAgence, editingMsgType) }}

Le message de fête sera automatiquement ajouté selon la période de l'année

⚠️ Le message dépasse 147 caractères et sera envoyé en plusieurs SMS

Configuration des Rappels SMS

Configurez l'heure à laquelle les SMS de rappel seront envoyés automatiquement aux clients.

Les SMS de rappel seront envoyés automatiquement à cette heure la veille du rendez-vous pour tous les clients ayant un rendez-vous confirmé.

Heure actuelle: {{ globalSettings.reminderEveTime || '16:00' }}

Exemple: Si configuré à 16:00, tous les rappels pour les rendez-vous de demain seront envoyés automatiquement à 16:00 aujourd'hui.

Les SMS de rappel seront envoyés automatiquement à cette heure le jour même du rendez-vous pour tous les clients ayant un rendez-vous confirmé.

Heure actuelle: {{ globalSettings.reminderTodayTime || '08:00' }}

Exemple: Si configuré à 08:00, tous les rappels pour les rendez-vous d'aujourd'hui seront envoyés automatiquement à 08:00 ce matin.

Informations

  • Les rappels sont envoyés uniquement pour les rendez-vous confirmés
  • Les SMS sont envoyés via l'API Brevo automatiquement
  • Tous les SMS envoyés sont enregistrés dans l'historique (onglet SMS)
  • Les erreurs d'envoi sont également enregistrées et peuvent être réenvoyées

Test et Débogage des Rappels

Testez l'envoi automatique des rappels en simulant une heure spécifique.

Simulez une heure pour voir quels rappels seraient envoyés.

Heure actuelle système: {{ new Date().toLocaleTimeString('fr-FR', {hour:'2-digit', minute:'2-digit'}) }}

Résultats du test ({{ rappelTestResults.length }} rappel(s) trouvé(s))

{{ result.rdv.nom || 'Sans nom' }}

Date RDV: {{ formatDateFr(result.rdv.date) }} à {{ result.rdv.heure }}

Téléphone: {{ result.rdv.telephone || 'Non renseigné' }}

Agence: {{ getAgenceName(result.rdv.agenceId) }}

Type: {{ result.type === 'rappel' ? 'Rappel veille' : 'Rappel jour J' }}

{{ result.message }}

Déjà envoyé À envoyer

Logs de débogage

[{{ log.time }}] {{ log.message }}
Aucun log pour le moment. Lancez un test pour voir les logs.

Gérer les Sources

{{ src }} ⚠️ Lien requis

Gérer les Motifs de Rendez-vous

Ces motifs apparaîtront dans la liste déroulante lors de la création d'un rendez-vous. Les utilisateurs peuvent également saisir un motif personnalisé.

{{ motif }}

Gérer les Motifs d'Annulation

Ces motifs apparaîtront dans la liste déroulante lors de l'annulation d'un rendez-vous. Les utilisateurs peuvent également choisir "Autre" pour saisir un motif personnalisé.

{{ motif }}

Éditer : Messages de Report

Les messages configurés ici s'appliqueront à toutes les agences.

Messages SMS : Ces messages seront envoyés automatiquement par SMS lors d'un report à l'initiative de l'agence.

Messages Agenda : Ces messages apparaîtront dans Google Agenda et la fiche du rendez-vous. Aucun SMS ne sera envoyé.

Aperçu du message :
{{ getReschedulePreview(motifType) }}

➕ Ajouter un nouveau motif

Éditer : Motifs de Report - Demande Interne

Les motifs configurés ici seront utilisés uniquement pour les reports à la demande interne (SMS envoyé par l'agence).

Aperçu du message :
{{ getReschedulePreview(motifType) }}

➕ Ajouter un nouveau motif interne

Message SMS - Demande de Validation d'Agence

Ce message sera envoyé à l'agence lorsqu'une demande de validation est effectuée pour un rendez-vous reporté.

Aperçu du message :
{{ getValidationAgencePreview() }}

🎄 Configuration des Messages Saisonniers

Configurez les messages de fête qui s'affichent automatiquement dans les SMS selon les périodes de l'année.

Cochez cette case pour afficher les messages de fête dans les SMS

{{ fete.emoji }}

{{ fete.label }}

{{ fete.description }}

Formatage des Caractéristiques Facebook

Configurez comment les caractéristiques Facebook sont formatées et traduites dans l'agenda Google.

Mettre les labels en gras
Aligner les valeurs
Espacer les éléments (saut de ligne entre chaque)

Gestion des Fermetures d'Entreprise

Planifiez les fermetures qui seront automatiquement ajoutées dans les agendas Google Calendar des professionnels.

{{ formatDateFr(ferm.dateDebut) }} - {{ formatDateFr(ferm.dateFin) }}
{{ ferm.motif }}
Tous les professionnels {{ ferm.professionnels ? ferm.professionnels.length : 0 }} professionnel(s)
Aucune fermeture planifiée

Connexion Google Calendar

Connectez-vous pour gérer vos rendez-vous dans Google Calendar

Connexion obligatoire pour créer un rendez-vous

Si activé, les utilisateurs devront se connecter à Google Calendar avant de pouvoir créer un rendez-vous.

Connexion automatique à la connexion

Si activé, une page de connexion Google s'affichera automatiquement après la connexion à l'application si Google Calendar n'est pas connecté.

Vérification du token en cours...

Connecté à Google Calendar Token valide

{{ googleCalendarUserEmail }}

Les rendez-vous sont automatiquement ajoutés à Google Calendar lors de leur validation.

Token valide encore : {{ tokenTimeRemaining.minutes }}min {{ tokenTimeRemaining.seconds }}s

Connecté mais token invalide Expiré

{{ googleCalendarUserEmail }}

Attention : Votre session a expiré

Le token d'authentification n'est plus valide. Vous devez vous reconnecter pour que les rendez-vous soient ajoutés à l'agenda.

Expiration dans : {{ tokenTimeRemaining.minutes }}min {{ tokenTimeRemaining.seconds }}s

Non connecté

Connectez-vous pour gérer vos rendez-vous dans Google Calendar

Simulation d'objectif

Simulez différents scénarios pour proposer à une agence. Calculez combien de RDV placer par jour/semaine et le revenu potentiel.

Si vous sélectionnez une agence, le système calculera automatiquement les RDV déjà placés.

Jours de travail par semaine: {{ getJoursTravailSimulation() }}
Jours de travail par mois: {{ getJoursTravailMoisSimulation() }}
RDV par jour (max): {{ getRdvParJourSimulation().toFixed(1) }}
RDV par semaine: {{ getRdvParSemaineSimulation().toFixed(1) }}
📊 Situation de l'agence
RDV déjà placés ce mois: {{ getRdvPlacesMoisSimulation() }}
Objectif mensuel: {{ simulationRdvTotal }}
RDV restants à placer: {{ getRdvRestantsMoisSimulation() }}
💡 Suggestions
RDV à placer cette semaine: {{ getRdvAPlacerCetteSemaineSimulation() }}
Commencer à placer pour la semaine prochaine: {{ getRdvAPlacerSemaineProchaineSimulation() }}
✅ Objectif atteint
L'agence a déjà atteint son objectif mensuel !
Jours de travail par semaine: {{ getJoursTravailSimulation() }}
RDV par semaine: {{ (simulationRdvParJour * getJoursTravailSimulation()).toFixed(0) }}
RDV par mois (estimé): {{ getRdvParMoisSimulation().toFixed(0) }}
📊 Situation de l'agence
RDV déjà placés ce mois: {{ getRdvPlacesMoisSimulation() }}
Objectif mensuel (estimé): {{ getRdvParMoisSimulation().toFixed(0) }}
RDV restants à placer: {{ getRdvRestantsMoisSimulation() !== null ? getRdvRestantsMoisSimulation() : 'N/A' }}
💡 Suggestions
RDV à placer cette semaine: {{ getRdvAPlacerCetteSemaineSimulation() }}
Commencer à placer pour la semaine prochaine: {{ getRdvAPlacerSemaineProchaineSimulation() }}
✅ Objectif atteint
L'agence a déjà atteint son objectif mensuel !
Revenu potentiel mensuel
{{ formatPrice(getRevenuPotentielSimulation()) }}
{{ simulationMode === 'total' ? simulationRdvTotal : getRdvParMoisSimulation().toFixed(0) }} RDV × {{ formatPrice(simulationPrixRdv) }}

Connexion Google Calendar

Connectez-vous pour gérer vos rendez-vous dans Google Calendar

Vérification du token en cours...

Connecté à Google Calendar Token valide

{{ prospecteurGoogleCalendarUserEmail || googleCalendarUserEmail }}

Les rendez-vous sont automatiquement ajoutés à Google Calendar lors de leur validation.

Token valide encore : {{ prospecteurDisplayTimeRemaining.minutes }}min {{ prospecteurDisplayTimeRemaining.seconds }}s

Connecté mais token invalide Expiré

{{ prospecteurGoogleCalendarUserEmail || googleCalendarUserEmail }}

Attention : Votre session a expiré

Le token d'authentification n'est plus valide. Vous devez vous reconnecter pour que les rendez-vous soient ajoutés à l'agenda.

Expiration dans : {{ prospecteurDisplayTimeRemaining.minutes }}min {{ prospecteurDisplayTimeRemaining.seconds }}s

Non connecté

Connectez-vous pour gérer vos rendez-vous dans Google Calendar

Format des Titres Google Calendar

Personnalisez les préfixes qui apparaissent dans les titres des événements Google Calendar

Si coché, les préfixes de cette agence seront appliqués à toutes les agences. Si décoché, les préfixes seront uniquement pour cette agence.

Vous modifiez les préfixes globaux qui s'appliquent à toutes les agences

Sélectionnez "Toutes les agences" pour modifier les préfixes globaux, ou une agence spécifique pour personnaliser

Texte qui apparaît devant le titre quand un geste commercial est appliqué

Exemple actuel : {{ agendaFormatSettings.prefixGesteCommercial }} C&N - M. Dupont...

Texte qui apparaît devant le titre quand un RDV est honoré mais non facturé

Exemple actuel : {{ agendaFormatSettings.prefixNonFacture }} C&N - M. Dupont...

Texte qui apparaît devant le titre quand un RDV est annulé

Exemple actuel : {{ agendaFormatSettings.prefixAnnule }} C&N - M. Dupont...

Texte qui apparaît devant le titre quand un RDV est honoré et facturé

Exemple actuel : {{ agendaFormatSettings.prefixHonore }} C&N - M. Dupont...

Texte qui apparaît devant le titre quand un RDV est honoré avec mandat signé (tag OK M)

Exemple actuel : {{ agendaFormatSettings.prefixMandatSigne }} C&N - M. Dupont...

Texte qui apparaît devant le titre quand un client n'est pas venu

Exemple actuel : {{ agendaFormatSettings.prefixPasVenu }} C&N - M. Dupont...

Personnalisez l'ordre des éléments dans le titre du RDV dans Google Calendar

Variables disponibles : {{CIVILITE}}, {{NOM}}, {{TELEPHONE}}, {{MODELE}}

Exemple actuel : {{ agendaFormatSettings.titreFormat }}

Personnalisez l'ordre des sections dans la description du RDV dans Google Calendar

Variables disponibles : {{VEHICULE}}, {{PRIX}}, {{LIEN}}, {{CARACTERISTIQUES}}, {{RENDEZ_VOUS_INITIAL}}, {{MOTIF}}, {{HISTORIQUE_REPORTS}}

Exemple actuel : {{ agendaFormatSettings.descriptionFormat }}

Note : Les modifications s'appliquent automatiquement à tous les nouveaux événements et aux mises à jour. Les événements existants seront mis à jour lors de leur prochaine modification.

Gestion des documents

Téléchargez et gérez les documents que les prospecteurs pourront consulter et télécharger.

Ajouter un document

{{ newScript.file.name }} {{ (newScript.file.size / 1024 / 1024).toFixed(1) }}MB
❌ Trop volumineux (limite: 10MB)
⚠️ Fichier >1MB - Pensez à compresser le document pour un chargement plus rapide
✅ Taille appropriée

Documents disponibles

Aucun document disponible

{{ script.name }}

{{ formatDateFr(script.createdAt) }}

{{ (script.fileSize / 1024 / 1024).toFixed(1) }}MB

Fichier volumineux (>1MB) - Pensez à compresser le document pour un chargement plus rapide

Journaux détaillés des actions

Historique complet de toutes les actions effectuées dans l'application (connexions, déconnexions, créations, modifications, etc.)

Aucun journal disponible

{{ log.user || log.details?.utilisateur || 'Système' }} {{ new Date(log.timestamp).toLocaleString('fr-FR', {day:'2-digit', month:'2-digit', year:'numeric', hour:'2-digit', minute:'2-digit'}) }}
{{ log.action }} - {{ log.details.client }} ({{ log.details.motif }}) - {{ log.details.heure }}

Tableau de bord de performance

Statistiques détaillées sur les 30 derniers jours

Taux de confirmation
{{ performanceStats.tauxConfirmation }}%
{{ performanceStats.totalConfirmes || 0 }} RDV confirmés
Taux d'annulation
{{ performanceStats.tauxAnnulation }}%
{{ performanceStats.totalAnnules || 0 }} RDV annulés
Taux d'honorisation
{{ performanceStats.tauxHonorisation }}%
{{ performanceStats.totalHonores || 0 }} RDV honorés
Taux de présence
{{ performanceStats.tauxPresence }}%
{{ performanceStats.totalPresents || 0 }} présents

Répartition des statuts

Total RDV (30j) {{ performanceStats.totalRdvs || 0 }}
En attente {{ performanceStats.totalEnAttente || 0 }}
Pas venus {{ performanceStats.totalPasVenus || 0 }}

Activité récente

RDV créés aujourd'hui {{ performanceStats.rdvAujourdhui || 0 }}
RDV cette semaine {{ performanceStats.rdvCetteSemaine || 0 }}
RDV ce mois {{ performanceStats.rdvCeMois || 0 }}

Prédiction de charge de travail (7 prochains jours)

{{ day.count }}
{{ day.label }}
{{ day.date }}

Notification de mise à jour

Envoyez une notification à tous les utilisateurs actuellement connectés pour les informer d'une mise à jour de l'application.

Ces informations seront visibles pour les utilisateurs sélectionnés (connectés et ceux qui se connecteront plus tard).

Mise en ordre des rendez-vous

Corrige automatiquement les statuts des rendez-vous selon leurs données réelles dans Firebase.

Rendez-vous à corriger : {{ rdvsToFixCount }}

Les rendez-vous avec des statuts incorrects seront automatiquement corrigés selon les données réelles Firebase.

Ce qui sera corrigé :
  • Rendez-vous honorés facturés sans le statut "honoré"
  • Rendez-vous dans le bilan sans le statut "honoré"
  • Rendez-vous passés depuis plus de 24h sans statut final
  • Rendez-vous pas venus vérifiés dans Firebase (si présents dans le bilan, corrigés en honoré)
  • Rendez-vous annulés vérifiés dans Firebase
  • Rendez-vous à venir avec statuts finaux incorrects
Rendez-vous à venir

Remet automatiquement tous les rendez-vous avec une date supérieure à aujourd'hui en statut "à venir" (confirmé).

Rendez-vous pas venus

Remet automatiquement tous les rendez-vous passés (finis depuis plus d'1h) sans statut honoré en statut "pas venu".

Recalcul des chiffres d'affaires

Recalcule tous les chiffres d'affaires (CA du jour, CA du mois, CA net) dans tous les onglets de l'application et met à jour le bilan.

Ce qui sera recalculé :
  • CA du jour : Recalcule le chiffre d'affaires du jour (exclut les RDV KO)
  • CA du mois : Recalcule le chiffre d'affaires brut du mois
  • CA net : Recalcule le chiffre d'affaires net (après commissions)
  • Bilan : Recharge et met à jour toutes les données du bilan
  • Portefeuille : Met à jour les statistiques du portefeuille
  • Dashboard : Actualise tous les chiffres du tableau de bord

Suppression en masse des rendez-vous

⚠️ ATTENTION : Cette action est irréversible. Tous les rendez-vous correspondant aux critères seront définitivement supprimés.

Filtres de sélection

Rendez-vous correspondants : {{ matchingRdvsCount }}

Ces rendez-vous seront définitivement supprimés si vous confirmez l'action.

Êtes-vous sûr ?

{{ bulkModal.label }}

{{ userHistoryModal.user?.name?.charAt(0).toUpperCase() || 'U' }}

{{ userHistoryModal.user?.name || 'Utilisateur' }}

Historique des connexions

Chargement de l'historique...

Aucun historique disponible

Résumé mensuel

Connexions
{{ monthlySummaries[userHistoryModal.user?.name]?.connexions || 0 }}
Temps total
{{ monthlySummaries[userHistoryModal.user?.name]?.tempsTotal || '0h' }}
Dernière connexion
{{ monthlySummaries[userHistoryModal.user?.name]?.derniereConnexion || '-' }}

Résumé journalier

Temps connecté aujourd'hui
{{ dailySummaries[userHistoryModal.user?.name]?.tempsJournalier || '0min' }}
{{ log.action === 'connexion' ? 'Connexion' : 'Déconnexion' }}
{{ formatLogTimestamp(log.timestamp || log.timestampOriginal) }}
{{ log.action === 'connexion' ? '✓' : '✗' }}

{{ editingAgency.id ? 'Modifier' : 'Nouvelle' }} Agence

Entrez l'adresse email de la personne qui partage son agenda Google avec vous. Si vide, l'agenda principal sera utilisé par défaut.

Numéro de téléphone pour recevoir les demandes de validation d'agence par SMS.

Le décalage horaire sera automatiquement appliqué pour les heures d'ouverture et les vérifications.

Ex: +3 pour 3 heures d'avance, -5 pour 5 heures de retard

Décalage actuel: +{{ editingAgency.timezoneOffset }}h

Heure locale agence: {{ getAgencyLocalTime(editingAgency.timezoneOffset) }}

{{ color }}

Choisissez la couleur des événements dans Google Calendar

Définissez les horaires d'ouverture et de fermeture pour chaque jour de la semaine. Cochez la case pour indiquer que le jour est ouvert.

{{ dayName }}

Définissez une heure à partir de laquelle l'agence ne prend plus de rendez-vous exceptionnellement (ex: 17h en hiver car il fait nuit tôt)

Définissez l'heure à partir de laquelle les RDV terminés passent automatiquement en 'Statut à définir' (ex: 19:00 pour Metz). Par défaut: 19:00

Définissez le nombre maximum de rendez-vous autorisés par créneau horaire pour cette agence. Si vide ou 0, aucune limite n'est appliquée.

Exemple: Si vous mettez 2, l'agence n'acceptera que 2 rendez-vous maximum à la même heure. Les créneaux complets ne seront plus proposés.

Définissez le délai minimum (en heures) entre deux rendez-vous. Si un rendez-vous est placé, le prochain ne pourra être placé qu'après ce délai. Si vide ou 0, aucun délai n'est appliqué.

Exemple: Si vous mettez 2, après avoir placé un rendez-vous à 10h00, le prochain rendez-vous pourra être placé à partir de 12h00.

Prix Affiché (TTC){{ formatPrice(editingAgency.prix) }}

Définissez des dates précises où l'agence sera fermée. Aucun rendez-vous ne pourra être pris ces jours-là.

Fermeture enregistrée

Si l'agence a des commerciaux, ils seront demandés lors de l'honorisation des RDV. Si vide, les RDV seront automatiquement ajoutés au Bilan.

Configurez les notifications automatiques pour les rendez-vous de cette agence. Les notifications seront planifiées dans l'agenda Google Calendar.

{{ wizard.step === 0 ? 1 : wizard.step + 1 }}/8 Nouveau RDV

Important

Merci de placer des rendez-vous sur les agences prioritaires

{{ index + 1 }}
{{ agence.nom }} {{ agence.restants }} RDV à placer cette semaine

Ces agences nécessitent des rendez-vous en priorité

Aucune agence prioritaire pour le moment. Vous pouvez placer des rendez-vous sur toutes les agences disponibles.

Nouveau Rendez-vous

Choisir l'Agence

Où aura lieu le rendez-vous ?

Aucune agence trouvée.

Informations Client

✨ Client existant détecté !

Date & Heure

⚠️ FERMÉ - Agence fermée à cette date

{{ getFermetureMessage(form.date, form.agence) || 'Cette agence est fermée à cette date. Veuillez choisir une autre date pour votre rendez-vous.' }}

Aucun rendez-vous ne peut être pris cette journée.

Les créneaux horaires ne sont pas disponibles

Créneau complet

Cette agence n'accepte que {{ form.agence.maxRdvParCreneau }} rendez-vous par créneau horaire et il y a déjà {{ countRdvAtTime(form.agence.id, form.date, form.heure) }} rendez-vous à {{ form.heure }}.

Vous ne pouvez pas placer ce rendez-vous à cette heure.

Agence complète

Cette agence est complète. Merci de ne plus placer de rendez-vous pour cette agence.

Maximum par jour atteint

Limite hebdomadaire atteinte

{{ form.agence.nbRdvParJour }} rendez-vous sont déjà placés c'est le maximum pour l'agence. Merci de placer le rendez-vous à un autre créneau.

💡 Les RDV annulés ou "pas venu" libèrent automatiquement une place

Cette heure est hors des horaires d'ouverture de l'agence

Ouverture : {{ getHorairesAgence(form.agence, form.date).heureOuverture }}
Fermeture : {{ getHorairesAgence(form.agence, form.date).heureFermeture }}
Pause : {{ getHorairesAgence(form.agence, form.date).heurePauseDebut }} - {{ getHorairesAgence(form.agence, form.date).heurePauseFin }}

Vous pourrez confirmer avec le bouton "Je place quand même le rendez-vous"

👆 Sélectionnez une date ci-dessus

Source du RDV

Mode de contact

Comment le rendez-vous a-t-il été pris ?

Véhicule

Astuce : Collez au minimum le nom du véhicule (obligatoire) et le prix (recommandé). Le système détectera automatiquement ces informations.

Aperçu formaté :

{{ form.facebookCaracteristiquesFormatees }}

Le système détecte automatiquement le modèle, le prix et formate les caractéristiques Le système détecte automatiquement le modèle (première ligne) et le prix

Saisissez le véhicule manuellement.

Saisissez le véhicule manuellement ou utilisez le mode intelligent ci-dessus.

🔄 Récupération des informations depuis Le Bon Coin...

Le lien de l'annonce est obligatoire pour {{ form.source }}

Récapitulatif

Agence
{{ form.agence?.nom }}
Client
{{ form.civilite }} {{ form.nom }}
Téléphone
{{ form.telephone }}
Véhicule
{{ getBaseModele(form.modele) || form.modele }}
{{ carac.label }} : {{ carac.value }}
Prix {{ formatPrice(form.prix) }}
Date & Heure
{{ formatDateFr(form.date) }} à
{{ form.heure }}
Source
{{ form.source }}
Mode de contact
{{ form.contactMode === 'message' ? 'Messages' : form.contactMode === 'telephone' ? 'Appel' : 'Non défini' }}
Lien de l'annonce Voir l'annonce
Motif {{ form.motif === '__CUSTOM__' ? form.motifCustom : form.motif }}

Google Calendar connecté

Si vous n'êtes plus connecté à Google, il faudra appuyer sur ce bouton pour vous reconnecter afin que vos rendez-vous se placent bien dans l'agenda.

Synchronisation de l'agenda

✅ Synchronisation terminée avec succès !

ℹ️ Aucun rendez-vous à synchroniser. Tout est à jour !

Rendez-vous ajoutés : {{ syncAgendaResultModal.addedCount }}
Rendez-vous corrigés : {{ syncAgendaResultModal.updatedCount }}

Mode Intelligent

À quoi ça sert ?

Collez directement depuis Le Bon Coin, La Centrale ou Facebook. Le système détecte automatiquement :

  • Le nom du véhicule (obligatoire)
  • Le prix (recommandé)
  • Les caractéristiques (Facebook)

Le Bon Coin / La Centrale

Collez au minimum le nom et le prix.

Exemple : AUDI Q2 1.5 35 TFSI • Ganges 2023 • 26 990 €

Facebook

Collez le nom, le prix et les caractéristiques.

Exemple : 2007 Citroën C3 • 2 300 € • 132 500 km • Manuel

{{ scriptPreviewModal.script?.name }}

Aperçu

Aperçu non disponible pour ce type de fichier

{{ scriptPreviewModal.script?.fileName }}

{{ googleCalendarAutoConnectModal.tokenExpired ? 'Votre jeton a expiré' : 'Merci de vous connecter pour poursuivre' }}

{{ googleCalendarAutoConnectModal.tokenExpired ? 'Merci de vous reconnecter.' : 'Cliquez sur se connecter obligatoirement pour vous connecter. Ça permet de ne rien rater dans l\'agenda pour les professionnels.' }}

Instructions de connexion :

  1. 1. Cliquez sur se connecter
  2. 2. Merci de vous connecter toujours avec l'adresse agendasolutions@gmail.com
  3. 3. Lorsque vous avez choisi l'adresse, cliquez sur continuer
  4. 4. Lorsque vous cliquez sur continuer, sélectionner toutes les cases et faites valider
  5. 5. Et le tour est joué

Important : Vous pouvez actualiser la page à tout moment quand vous êtes connectés. Ça vous permettra de toujours rester connecté à Google car la connexion est maintenue uniquement pendant une heure.

Vérification Agenda

Ce rendez-vous n'est pas encore dans l'agenda.

Avez-vous bien placé ce rendez-vous dans l'agenda avant de valider ?

Confirmer le rendez-vous

Vous allez confirmer ce rendez-vous.

Avez-vous vraiment confirmé ce rendez-vous avec le client ?

Connexion requise

Appuyez sur ce bouton pour vous reconnecter et pouvoir ajouter ce rendez-vous dans l'agenda.

Dès que vous serez reconnecté, le rendez-vous sera automatiquement ajouté à l'agenda.

Agences de rotation

{{ rotationAgenciesModal.prospecteur?.name }}

Sélectionnez les agences sur lesquelles ce prospecteur doit tourner. La rotation automatique se fera uniquement entre ces agences.

{{ agence.nom }}
{{ getAgencyProspectors(agence.id).length }} prospecteur{{ getAgencyProspectors(agence.id).length > 1 ? 's' : '' }}

Aucune agence trouvée

Historique des messages - Statut de lecture

Filtres de statut

Aucun message trouvé

{{ group.name.charAt(0).toUpperCase() }}
{{ group.name }} Global
Dernier message : {{ formatDateTime(group.lastInteraction) }} Pris en compte : {{ formatDateTime(group.lastAcknowledged) }}
Pris en compte Vu Non lu {{ group.messages.length }} message{{ group.messages.length > 1 ? 's' : '' }}
{{ msg.prospecteurName.charAt(0).toUpperCase() }}
{{ msg.prospecteurName }} Message à tous
{{ formatDateTime(msg.createdAt) }} • {{ msg.totalCount }} prospecteur{{ msg.totalCount > 1 ? 's' : '' }}
{{ msg.readCount }}/{{ msg.totalCount }} vu{{ msg.readCount > 1 ? 's' : '' }} {{ msg.acknowledgedCount }}/{{ msg.totalCount }} pris en compte
Pris en compte Vu Non lu
Déjà lu par certains (modification désactivée)
{{ formatDateTime(msg.createdAt) }} • {{ msg.totalCount }} prospecteur{{ msg.totalCount > 1 ? 's' : '' }}
Pris en compte Vu Non lu
Pris en compte le : {{ formatDateTime(msg.acknowledgedAt) }}
{{ msg.readCount }}/{{ msg.totalCount }} vu{{ msg.readCount > 1 ? 's' : '' }} {{ msg.acknowledgedCount }}/{{ msg.totalCount }} pris en compte

Rappel Facturation

Important - Action requise

Facturation à réaliser et à envoyer le 1er au client

N'oubliez pas de préparer et d'envoyer la facturation mensuelle le premier jour du mois prochain.

Assignation en masse

Sélectionnez les prospecteurs et les agences

Étape 1 : Sélectionnez les prospecteurs

{{ filteredBulkProspecteurs.length }} prospecteur{{ filteredBulkProspecteurs.length > 1 ? 's' : '' }} disponible{{ filteredBulkProspecteurs.length > 1 ? 's' : '' }}

Étape 2 : Sélectionnez les agences

{{ filteredBulkAgencies.length }} agence{{ filteredBulkAgencies.length > 1 ? 's' : '' }} disponible{{ filteredBulkAgencies.length > 1 ? 's' : '' }}
Étape {{ bulkAssignmentModal.step }}/2

{{ globalProspecteurMessageModal.isEdit ? 'Modifier le message global' : (globalProspecteurMessageModal.targetProspecteur === 'all' ? 'Message à tous les prospecteurs' : 'Message à un prospecteur') }}

{{ globalProspecteurMessageModal.isEdit ? 'Modifiez le message ci-dessous' : (globalProspecteurMessageModal.targetProspecteur === 'all' ? 'Ce message sera envoyé à tous les prospecteurs' : 'Sélectionnez le prospecteur et tapez votre message') }}

Vous pouvez utiliser du HTML pour formater votre message (gras, couleurs, etc.)

Important : Les prospecteurs devront taper "OK" et vous pourrez voir qui a lu le message dans l'historique.

{{ agencyDetailsModal.agence.nom }}

{{ getAgencyProspectors(agencyDetailsModal.agence.id).length }} prospecteur{{ getAgencyProspectors(agencyDetailsModal.agence.id).length > 1 ? 's' : '' }}

Aucun prospecteur assigné à cette agence

{{ prospecteur.name.charAt(0).toUpperCase() }}
{{ prospecteur.name }}
Depuis {{ getDaysInAgency(prospecteur, agencyDetailsModal.agence.id) }} jour{{ getDaysInAgency(prospecteur, agencyDetailsModal.agence.id) > 1 ? 's' : '' }}

Ajouter un prospecteur

{{ addProspecteurToAgencyModal.agence.nom }}

{{ prospecteur.name.charAt(0).toUpperCase() }}
{{ prospecteur.name }}
{{ prospecteur.email }}

Aucun prospecteur disponible

Déplacer prospecteur

{{ moveProspecteurModal.prospecteur?.name }}

{{ agence.nom }}
{{ getAgencyProspectors(agence.id).length }} prospecteur{{ getAgencyProspectors(agence.id).length > 1 ? 's' : '' }}

{{ agencyStatsModal.agence.nom }}

{{ agencyStatsModal.agence.adresse || 'Adresse non définie' }}

Semaine actuelle

{{ jour.nom.toUpperCase() }}
{{ formatDateForDisplay(jour.date) }}
{{ jour.rdvPlaces }}/{{ jour.objectif }}
Peut placer: {{ jour.peutPlacer }}
✓ Complet
Fermeture
Fermé
Non défini

Semaine prochaine

{{ jour.nom.toUpperCase() }}
{{ jour.rdvPlaces }}/{{ jour.objectif }}
✓ Complet
Disponible
Disponible
Fermé
Non défini
Action requise

Il reste {{ getRdvManquantsSemaine(agencyStatsModal.agence) }} {{ getRdvManquantsSemaine(agencyStatsModal.agence) === 1 ? 'dernier RDV' : 'derniers RDV' }} à placer cette semaine.

Il reste {{ getRdvManquantsSemaine(agencyStatsModal.agence) }} RDV à placer cette semaine.

Semaine complète ✓

Objectif atteint. Placer des RDV pour la semaine prochaine.

Placement provisoire

Affecter temporairement un prospecteur à des agences

{{ index + 1 }}
{{ step }}

Période sélectionnée :

Du {{ formatDateFr(placementProvisoireModal.dateDebut) }} au {{ formatDateFr(placementProvisoireModal.dateFin) }}
({{ getDaysBetween(placementProvisoireModal.dateDebut, placementProvisoireModal.dateFin) }} jour{{ getDaysBetween(placementProvisoireModal.dateDebut, placementProvisoireModal.dateFin) > 1 ? 's' : '' }})

Veuillez sélectionner les dates

Pendant la période du {{ formatDateFr(placementProvisoireModal.dateDebut) }} au {{ formatDateFr(placementProvisoireModal.dateFin) }}, le prospecteur sera affecté à ces agences (c'est ce qu'il verra maintenant).

Après le {{ formatDateFr(placementProvisoireModal.dateFin) }}, le prospecteur sera automatiquement réattitré à ces agences (il verra ces agences après la période).

{{ agencyViewModal.agence.nom }}

{{ agencyViewModal.agence.adresse || 'Adresse non définie' }}

RDV Placés
{{ getRdvPlacesMoisPourAgence(agencyViewModal.agence.id) }}
{{ agencyViewModal.agence.objectifMensuel ? 'Ce mois' : 'Cette semaine' }}
RDV Restants
{{ getRdvRestantsPourAgence(agencyViewModal.agence) }}
{{ agencyViewModal.agence.objectifMensuel ? 'Ce mois' : 'Cette semaine' }}
Objectif Mensuel
{{ agencyViewModal.agence.objectifMensuel || 0 }}
Par mois
🤖 Mode Automatique - Suggestion du système

{{ getMessageEncouragementAutomatique(agencyViewModal.agence).message }}

{{ getMessageEncouragementAutomatique(agencyViewModal.agence).suggestion }}

Conseil automatique : Même si la semaine est vide, essayez de placer au moins quelques rendez-vous cette semaine pour maintenir une activité régulière et atteindre vos objectifs mensuels.

Action requise

Il reste {{ getRdvManquantsSemaine(agencyViewModal.agence) }} {{ getRdvManquantsSemaine(agencyViewModal.agence) === 1 ? 'rendez-vous' : 'rendez-vous' }} à placer cette semaine pour cette agence.

Paramètres de l'agence

⚠️ Ce nombre est uniquement informatif. Il sert à avertir si on essaie de placer plus de RDV que prévu pour un jour donné. Il n'est pas utilisé dans le calcul des RDV restants.

Mode Automatique activé : Le système gère automatiquement tous les calculs, détermine combien de rendez-vous manquent pour cette agence, envoie les messages d'avertissement si nécessaire, et gère tout sans intervention manuelle. Vous devez définir le nombre maximum de RDV par jour ci-dessus.

Connexion Google Agenda requise

{{ googleCalendarDisconnectedModal.fromReschedule ? 'Vous devez être connecté à Google Calendar pour reporter un rendez-vous.' : 'Votre session a expiré ou le token a expiré.' }}

{{ googleCalendarDisconnectedModal.fromReschedule ? 'Pour reporter ce rendez-vous :' : 'Pour ajouter ce rendez-vous à l\'agenda :' }}

  1. 1. Cliquez sur "Se connecter" ci-dessous
  2. 2. Autorisez l'accès à Google Calendar
  3. 3. {{ googleCalendarDisconnectedModal.fromReschedule ? 'Revenez sur ce rendez-vous pour le reporter' : 'Revenez sur ce rendez-vous pour le valider' }}

Le rendez-vous a été créé avec le statut "Confirmer + Tard" et sera ajouté à l'agenda une fois reconnecté.

Appuyez sur Entrée pour sélectionner, ESC pour fermer

Aucun résultat trouvé

{{ result.civilite }} {{ result.nom }}
{{ result.modele }} • {{ result.telephone }} • {{ formatDateFr(result.date) }} à {{ result.heure }}
{{ displayStatus(result) }}

Raccourcis disponibles

Ctrl/Cmd + K Recherche globale

Ctrl/Cmd + N Nouveau RDV

ESC Fermer

👋

{{ welcomeModal.title }}

{{ welcomeModal.message }}

👋

{{ tutorialModal.userFirstName && tutorialModal.userLastName ? 'Bonjour ' + tutorialModal.userFirstName + ' ' + tutorialModal.userLastName + ' !' : (tutorialModal.userFirstName ? 'Bonjour ' + tutorialModal.userFirstName + ' !' : 'Bonjour ' + tutorialModal.userName + ' !') }}

Bienvenue sur ARIA

Le service de prise de rendez-vous qui vous simplifie la vie !

✨ À quoi ça sert ?

Vous allez pouvoir placer des rendez-vous, suivre vos rendez-vous et gérer vos rendez-vous facilement.

💬 Besoin d'aide ?

Contactez directement C&N Solutions sur WhatsApp ou au 07 56 96 95 02

Votre nom et prénom

{{ tutorialModal.userFirstName }} {{ tutorialModal.userLastName }}

Si votre nom et prénom est mal orthographié, vous pouvez le modifier en appuyant sur le petit crayon :

WhatsApp
📅

Connexion Google Calendar

Pour utiliser ARIA efficacement, vous devez vous connecter à Google Calendar.

Connexion automatique active

Vous êtes actuellement connecté automatiquement grâce à l'administrateur. Cependant, par la suite, si vous êtes déconnecté, une page s'ouvrira automatiquement pour vous demander de vous connecter.

Cette page s'ouvre systématiquement si vous n'êtes pas connecté. Cela permet de faire les choses convenablement et de toujours être à jour dans l'agenda des clients, car la connexion est importante pour que chaque modification puisse être apportée dans l'agenda des clients sur Google Calendar.

Pourquoi se connecter ?

La connexion à Google Calendar permet de gérer vos rendez-vous dans votre agenda. Utilisez le bouton "Mise à jour Agenda" pour synchroniser manuellement vos rendez-vous.

Instructions de connexion :

  1. 1. Cliquez sur se connecter
  2. 2. Merci de vous connecter toujours avec l'adresse agendasolutions@gmail.com
  3. 3. Lorsque vous avez choisi l'adresse, cliquez sur continuer
  4. 4. Lorsque vous cliquez sur continuer, sélectionner toutes les cases et faites valider
  5. 5. Et le tour est joué
🎉

Ça y est, vous êtes prêts !

Vous pouvez commencer à utiliser ARIA.

🎉

C'est bon, vous êtes prêts !

Il vous reste encore une dernière étape : rendez-vous dans Mes documents.

Important : Il est très important de toujours garder vos documents et de prendre le temps de les lire.

Documents disponibles

Dans la barre latérale, vous trouverez l'onglet "Mes documents" qui contient tous les documents importants pour le bon fonctionnement de votre activité.

📹 Vidéo Tutoriel - ARIA

Annuler le rendez-vous

L'annulation par l'agence ne nécessite pas de motif.

Agence Indisponible

{{ getPauseMessage(pausedAgencyModal.agency) }}

Retirer de l'agenda ?

{{ fermetureModal.editingId ? 'Modifier la Fermeture' : 'Ajouter une Fermeture' }}

Agences concernées

Cette fermeture sera mise à jour dans l'agenda Google Calendar. Cette fermeture sera automatiquement ajoutée dans l'agenda Google Calendar de tous les professionnels pour toute la journée.

Supprimer la fermeture ?

Êtes-vous sûr de vouloir supprimer cette fermeture ? Les événements seront retirés des agendas Google Calendar.

Heure proche de la fermeture

L'heure sélectionnée ({{ heureFermetureConfirmModal.heure }}) est proche de l'heure de fermeture de l'agence ({{ heureFermetureConfirmModal.heureFermeture }}).

Êtes-vous sûr de vouloir placer ce rendez-vous à cette heure ?

⚠️

Placement provisoire

Information importante

Nous vous avons attitré sur {{ userNotificationModal.placementData.agencesProvisoires.length > 1 ? 'ces agences' : 'cette agence' }} sur cette période.

Agence{{ userNotificationModal.placementData.agencesProvisoires.length > 1 ? 's' : '' }} provisoire{{ userNotificationModal.placementData.agencesProvisoires.length > 1 ? 's' : '' }}

{{ agence.nom }}

Période

Du {{ formatDateFr(userNotificationModal.placementData.dateDebut) }} → Au {{ formatDateFr(userNotificationModal.placementData.dateFin) }}

Merci de placer des rendez-vous pour {{ userNotificationModal.placementData.agencesProvisoires.length > 1 ? 'ces agences' : 'cette agence' }} s'il vous plaît.

Après cette période

Vous serez automatiquement réattitré à :

{{ agence.nom }}

Heure limite dépassée

Cette agence ne prend plus de rendez-vous à partir de {{ heureLimiteExceptionnelleModal.heureLimite }}.

Motif : {{ heureLimiteExceptionnelleModal.motif }}

L'heure sélectionnée ({{ heureLimiteExceptionnelleModal.heure }}) est après cette limite.

Agence fermée

{{ fermetureDateInfoModal.message }}

Agence complète pour ce jour

L'agence {{ forceRdvCompletModal.agence?.nom }} a déjà atteint son objectif de {{ forceRdvCompletModal.agence?.nbRdvParJour }} rendez-vous pour le {{ formatDateForDisplay(forceRdvCompletModal.date) }}.

{{ countRdvForDay(forceRdvCompletModal.agence?.id, forceRdvCompletModal.date) }} rendez-vous sont déjà placés sur {{ forceRdvCompletModal.agence?.nbRdvParJour }} maximum.

⚠️ Avec accord de l'administrateur, vous pouvez forcer le placement

L'administrateur recevra cette demande et pourra la valider ou la refuser.

Agence fermée à cette heure

L'heure sélectionnée ({{ heureApresFermetureModal.heure }}) est après l'heure de fermeture de l'agence ({{ heureApresFermetureModal.heureFermeture }}).

L'agence est fermée à cette heure. Souhaitez-vous vraiment placer ce rendez-vous ?

Heure hors des horaires d'ouverture

Heure hors des horaires d'ouverture

L'heure sélectionnée ({{ heureHorsHorairesModal.heure }}) est en dehors des horaires d'ouverture de l'agence.

{{ heureHorsHorairesModal.raison }}

Ouverture : {{ heureHorsHorairesModal.heureOuverture }}
Fermeture : {{ heureHorsHorairesModal.heureFermeture }}
Pause : {{ heureHorsHorairesModal.heurePauseDebut }} - {{ heureHorsHorairesModal.heurePauseFin }}

Souhaitez-vous quand même placer ce rendez-vous ?

Prospecteur le plus fort

{{ bestProspecteurModal.agence.nom }}

Recherche du meilleur prospecteur...

{{ bestProspecteurModal.prospecteur.name }}

Le prospecteur le plus performant sur cette agence

Total RDV
{{ bestProspecteurModal.stats.totalRdv }}
RDV Honorés
{{ bestProspecteurModal.stats.honoredRdv }}
Taux Conversion
{{ Math.round(bestProspecteurModal.stats.conversionRate) }}%
RDV/Jour
{{ bestProspecteurModal.stats.avgRdvPerDay.toFixed(1) }}

Basé sur les performances historiques sur cette agence

Aucun prospecteur n'a encore travaillé sur cette agence

Agences prioritaires

Nous vous conseillons de placer des rendez-vous sur ces agences impérativement.

Le système vous guide automatiquement vers les agences qui ont le plus besoin de rendez-vous.

{{ agence.nom }}

{{ agence.adresse }}

{{ agence.restants }} RDV à placer

Recommandation du système

Nous vous conseillons de placer le système automatiquement selon l'agence la plus faible.

Voici les agences qui ont le plus besoin de rendez-vous en ce moment.

{{ agence.nom }}

{{ agence.adresse }}

{{ agence.restants }} RDV à placer {{ agence.objectifMensuel ? 'ce mois' : 'cette semaine' }}

Rendez-vous créé

Rendez-vous bien créé

Votre rendez-vous a bien été enregistré.

En attente de validation

Votre rendez-vous sera vérifié par C&N Solutions avant d'être placé dans l'agenda du professionnel.

RDV en attente de validation ({{ validationRdvModal.rdvs.length }})

Aucun RDV en attente

{{ rdv.civilite }} {{ rdv.nom }}

Par {{ rdv.createdBy }}
Date : {{ formatDateFr(rdv.date) }} à {{ rdv.heure }}
Véhicule : {{ rdv.modele }}
Agence : {{ getAgenceName(rdv.agenceId) }}
Téléphone : {{ rdv.telephone }}

Vous devez être connecté à Google Calendar pour valider les RDV

Annuler le rendez-vous

Client : {{ annulerRdvModal.rdv.civilite }} {{ annulerRdvModal.rdv.nom }}

Date : {{ formatDateFr(annulerRdvModal.rdv.date) }} à {{ annulerRdvModal.rdv.heure }}

Reporter Rendez-Vous

RDV Actuel: {{ formatDateFr(rescheduleModal.rdv.date) }} à {{ rescheduleModal.rdv.heure }}

Choisir le Nouveau Jour :

Il reste {{ getCreneauxRestantsPourDate(rescheduleModal.rdv.agenceId, rescheduleModal.date) }} créneau{{ getCreneauxRestantsPourDate(rescheduleModal.rdv.agenceId, rescheduleModal.date) > 1 ? 'x' : '' }} à placer pour ce jour-là

Heures rapides

Les créneaux horaires ne sont pas disponibles

📅 Veuillez d'abord sélectionner une date ci-dessus.

{{ rescheduleModal.smsMessage }}

Aucun message SMS automatique configuré pour ce motif.

{{ rescheduleModal.motif }}

Le motif sera enregistré dans Google Agenda et la fiche du rendez-vous. Aucun SMS ne sera envoyé pour un report à la demande du client.

Report validé !

Le rendez-vous a bien été déplacé au
{{ formatDateLong(rescheduleModal.rdv.date) }} à {{ rescheduleModal.rdv.heure }}.

C&N Solutions a été informé

Dès que la validation sera effectuée, vous recevrez un message pour envoyer le report au client.

Report Validé

Votre rendez-vous avec

{{ validationReportModal.rdv.civilite }} {{ validationReportModal.rdv.nom }}

a été reporté et validé

Ancien rendez-vous

{{ formatDateLong(validationReportModal.rdv.oldDate || validationReportModal.rdv.date) }} à {{ validationReportModal.rdv.oldHeure || validationReportModal.rdv.heure }}

Nouveau rendez-vous

{{ formatDateLong(validationReportModal.rdv.date) }} à {{ validationReportModal.rdv.heure }}

Souhaitez-vous envoyer un message de report au client ?

Les SMS sont désactivés pour cette agence. L'agence enverra le message de report au client.

Analyse des Prospecteurs - Cette Semaine

Analyse en cours...

Calcul des statistiques et des recommandations

Aucune recommandation

Les prospecteurs sont bien répartis sur les agences

Recommandations pour cette semaine

Basées sur les performances historiques et les statistiques de cette semaine

{{ index + 1 }}

Placer {{ rec.prospecteur.name }} sur {{ rec.agence.nom }}

{{ rec.reason }}

RDV/jour

{{ rec.stats.placementRate.toFixed(2) }}

Conversion

{{ rec.stats.conversionRate.toFixed(1) }}%

Cette semaine

{{ rec.rdvThisWeek }} RDV

Sélectionner un Motif

Sélectionner un Motif

🌦️ Météo

🚗 Véhicule

💼 Contrainte professionnelle

👤 Contrainte personnelle

📄 Problème d'organisation

🏥 Empêchement médical

Modifier RDV

Réglages Bilan & TVA

Assujetti à la TVA
Activer le calcul automatique
(La TVA s'appliquera aux RDV après cette date)

Bilans & Objectifs

Assigner un commercial

Agence: {{ urgentCommercialModal.rdv?.agence }}

Date: {{ formatBilanDate(urgentCommercialModal.rdv?.date) }}

Définir un objectif

Laissez vide pour définir un objectif global à l'agence

Tarifs personnalisés par agence

Définissez des tarifs progressifs. Exemple : 50€ pour les premiers RDV, puis 60€ à partir du 21e RDV.

Le client est-il venu ?

Confirmez la présence du client au rendez-vous

Le geste commercial a été ajouté. Veuillez confirmer si le client s'est présenté au rendez-vous.

Rendez-vous honoré ?

Le client a-t-il signé un Mandat (OK M) ?

{{ honorModal.error }}

Si vous choisissez "Je ne sais pas", le RDV sera dans "À traiter urgent" du Bilan jusqu'à ce qu'un commercial soit assigné.

De temps en temps, vérifiez si le commercial a mis son nom et allez dans "À traiter" pour mettre son nom et valider. Sinon, les gérants C&N Solutions prendront le relais à la fin du mois si vous ne l'avez pas fait.

Réduction appliquée

-{{ formatPrice(honorModal.discountAmount) }}

{{ honorModal.discountReason }}

Synchronisation...

Recherche des mises à jour

Synchronisation terminée

{{ syncGoogleCalendarResult.rdvsDeplaces }} rendez-vous déplacé{{ syncGoogleCalendarResult.rdvsDeplaces > 1 ? 's' : '' }} mis à jour

{{ syncGoogleCalendarResult.statuts }} statut{{ syncGoogleCalendarResult.statuts > 1 ? 's' : '' }} mis à jour

Modifier les informations

Mettez à jour les détails du client

:
Aucune caractéristique ajoutée

Synthèse Facturation Facturation

RDV honorés et facturés uniquement

Dernier jour du mois

Téléchargez tous les PDFs d'agence en un clic

{{ agName }}
{{ formatBilanPrice(agData.totalTTC) }} € TTC
HT: {{ formatBilanPrice(agData.totalHT) }} €
Commercial / Détail Nb RDV Total HT TVA Total TTC Actions
{{ comm.nom || 'Agence (Direct)' }}
{{ comm.rdv }} {{ formatBilanPrice(comm.ht) }} € {{ formatBilanPrice(comm.tva || 0) }} € {{ formatBilanPrice(comm.ttc || comm.ht) }} €
{{ comm.nom || 'Agence (Direct)' }}
Nb RDV: {{ comm.rdv }}
Total HT: {{ formatBilanPrice(comm.ht) }} €
TVA: {{ formatBilanPrice(comm.tva || 0) }} €
Total TTC: {{ formatBilanPrice(comm.ttc || comm.ht) }} €

Aucune agence ne correspond à votre recherche.

Aucune donnée de facturation pour cette sélection.

🎁

Gestes Commerciaux

{{ gesteCommercialBillingModal.commercialName }}

Total des gestes commerciaux : {{ formatBilanPrice(gesteCommercialBillingModal.total) }} €
🎁
{{ geste.clientName }}
{{ formatDate(geste.date) }}
-{{ formatBilanPrice(geste.montant) }} €

Aucun geste commercial