- Installation
- Assistant d'installation
- Mise à jour
-
Utiliser Loxya
- Terminologie
- Rôles des utilisateurs
- Menus et navigation
- Sélecteur de parc
- Recherche / scan rapide
- Menu principal
- Menu utilisateur
- Listings
- Création / modification
- Bénéficiaires
- Fiche d'un bénéficiaire
- Import des bénéficiaires
- Techniciens
- Fiche d'un technicien
- Accès des techniciens
- Le matériel
- Fiche d'un matériel
- Caractéristiques spéciales
- Documents du matériel
- Unités de matériel
- Indispo. du matériel
- Codes-barres
- Le planning (calendrier)
- Le planning (liste)
- Fenêtre d'un événement
- Onglet "Informations"
- Onglet "Techniciens"
- Onglet "Matériel"
- Onglet "Devis"
- Onglet "Factures"
- Onglet "Documents"
- Onglet "Notes"
- Onglet "Historique"
- Créer / modif. un événement
- Étape 1 - Informations
- Étape 2 - Bénéficiaires
- Étape 3 - Techniciens
- Étape 4 - Matériel
- Listes multiples
- Étape 5 - Facturation
- Étape 6 - Récapitulatif
- Réservations en ligne
- Partie "externe"
- Traitement des demandes
- Comptes bénéficiaires
- Approbation ou rejet
- Matériel réservable
- Vue dans le planning
- Modifier une réservation
- Étape 1 - Informations
- Étape 2 - Matériel
- Étape 3 - Facturation
- Étape 4 - Récapitulatif
- Devis et factures
- Détails des calculs
- Départ du matériel
- Retour du matériel
- Dupliquer un événement
- Modèles de liste
- Parcs de matériel
- Inventaires des parcs
- Emplacements de parc
- Gérer les utilisateurs
- Paramètres utilisateur
- Gérer son profil
- Préf. d'interface
- Préf. de notifications
- Paramètres généraux
- Param. du calendrier
- Gérer les Catégories
- Gérer les Tags
- Param. des fiches de sortie
- Param. des réservations
- Param. des inventaires
- Param. des taxes
- Param. des coefficients
- Participer
- Annexes
- Licence
Annexes
Dépendances et compatibilité des versions
Version de PHP et MySQL
Voici un tableau qui récapitule, pour chaque version du logiciel, les différentes versions de PHP et MySQL (ou MariaDB) qui sont officiellement supportées et testées.
Toute utilisation d'une version inférieure de PHP ne fonctionnera pas, c'est certain.
Les versions de PHP supérieures à celles indiquées fonctionnent sûrement sans problème la plupart du temps, mais n'ont pas encore été testées et ne sont donc pas supportées officiellement.
Version de Loxya | PHP (versions testées) | MySQL | MariaDB |
---|---|---|---|
0.16.x (nov. 2021) | 7.3 | >= 5.7.9 | >= 10.2.7 |
0.17.x (janv. 2022) | 7.3 | >= 5.7.9 | >= 10.2.7 |
0.18.x (mars 2022) | 7.4 | >= 5.7.9 | >= 10.2.7 |
0.19.x (juil. 2022) | 7.4 | >= 5.7.9 | >= 10.2.7 |
0.20.x (mars 2023) | 8.0 ou 8.1 | >= 5.7.9 | >= 10.2.7 |
0.21.x (mai 2023) | 8.0 ou 8.1 | >= 5.7.9 | >= 10.2.7 |
0.22.x (août 2023) | 8.0 ou 8.1 | >= 5.7.9 | >= 10.2.7 |
0.23.x (nov. 2023) | 8.0 ou 8.1 | >= 5.7.9 | >= 10.2.7 |
0.24.x (mai 2024) | 8.1, 8.2 ou 8.3 | >= 5.7.9 | >= 10.2.7 |
1.0.x (nov. 2024) | 8.1, 8.2 ou 8.3 | >= 5.7.9 | >= 10.2.7 |
Notes :
- Le numéro de la version du logiciel installé se trouve dans le fichier
src/VERSION
. - L'information de la (les) version(s) de PHP officiellement supportée(s) pour la version installée est affichée dans le fichier
composer.json
, dansrequire
→php-64bits
.
Modules PHP requis
Les extensions PHP (modules) requis par le logiciel sont les suivants :
bcmath
, curl
, dom
, fileinfo
, gettext
, iconv
, intl
, json
, mbstring
, pcre
, PDO
, pdo_mysql
, openssl
, et xml
.
Ajouter un logo en en-tête des PDF
Pour ajouter le logo de votre structure en en-tête des fiches de sortie, des devis et des factures, il faut :
- Ajouter le fichier du logo dans le dossier
src/public/img/
. Ce fichier doit être une image du type JPEG ou PNG. Dans l'idéal, cette image ne devrait avoir une résolution d'au moins 400x250 pixels (notez aussi le rapport d'affichage, qui devrait rester plus large que haut). - Assurez-vous que le fichier est bien accessible en lecture par l'utilisateur système du serveur web (par ex.
www-data
). - Ensuite, dans le fichier de configuration (voir ci-dessous), insérer la clé
companyData.logo
avec comme valeur le nom de ce fichier.
Pour exemple, voici un extrait du fichier de configuration modifié pour ajouter un logovotre_logo.jpg
:
},
"companyData": {
"name": "Votre société",
"logo": "votre_logo.jpg",
"street": "32, rue du matoss",
(...)
Paramétrer l'envoi d'e-mails ( Premium)
Dans le fichier /src/App/Config/settings.json
, vous pouvez ajouter une section qui permettra au logiciel d’envoyer des e-mails, grâce à la fonction mail du serveur, ou alors via un serveur SMTP, ou encore en utilisant l’API de Mailjet (service d’envoi d’e-mails). Cette section se présente ainsi :
"email": {
"from": {
"email": "notifications@example.com",
"name": "Notifications Exemple"
},
"driver": "mail",
"smtp": {
"host": "your.smtp.com",
"port": 465,
"username": "notifications@example.com",
"password": "mot-de-passe-smtp",
"security": "ssl"
},
"mailjet": {
"apiKey": "Clé d’API de Mailjet",
"apiSecretKey": "Clé secrète pour l’API de Mailjet"
}
},
Il faut bien sûr ne pas oublier d’utiliser la bonne valeur de driver
("mail", "smtp" ou "mailjet") selon le service choisi et renseigné.
Retrouvez le détail de chaque paramètre du fichier de configuration dans cette section.
Pour tester ces paramètres en envoyant un e-mail de test, vous pouvez utiliser la commande suivante dans un terminal, en vous plaçant dans le dossier racine du projet :
./bin/console test:email votre-adresse@exemple.com
Vous devriez ensuite recevoir un e-mail à l'adresse donnée dont le sujet est « Test de la configuration Loxya », et le corps du message « L'envoi des e-mails depuis Loxya fonctionne correctement ! ». Si ce n'est pas le cas, alors le message d'erreur affiché dans votre terminal vous donnera plus d'informations sur l'origine du problème.
Configurer les notifications ( Premium)
Une fois que l’envoi des e-mails est configuré (voir point précédent), vous pouvez activer et paramétrer les notifications elles-mêmes. Pour cela, il faut utiliser la section suivante dans le fichier /src/App/Config/settings.json
:
"notifications": {
"overdue": {
"enabled": true,
"days": [1, 15, 22, 27, 30],
"lookBackMaxMonths": 2
},
"preparers": {
"enabled": true,
"daysBefore": 1
}
},
Vous pouvez activer les notifications suivantes en mettant à true
les paramètres enabled
de :
overdue
: Envoi d’une notification au bénéficiaire d’un événement ou d’une réservation, tant qu’il n’a pas retourné l’intégralité du matériel.preparers
: Envoi d’une notification au préparateur de commande assigné à un événement, quelques jours avant le début de cet événement.
Bien entendu, pour que l’envoi des notifications fonctionne, il faut paramétrer une tâche CRON (voir ci-dessous).
Retrouvez le détail de chaque paramètre du fichier de configuration dans cette section.
Tâches CRON
Certaines tâches doivent être exécutées régulièrement par le logiciel, comme par exemple l’envoi de notifications par e-mail, ou le "nettoyage" de données obsolètes.
Dans le fichier src/App/Config/CRON.json
se trouve la liste des tâches à créer, avec :
time
: La récurrence à utiliser. Par exemple, "daily" signifie une fois par jour (à vous de choisir l’heure précise).command
: La commande à exécuter, grâce àbin/console
(en spécifiant le chemin complet). Par exemple :
/var/www/loxya/bin/console notifications:reminders
.
Choisir un scanner de code-barre ( Premium)
Les codes-barres des unités de matériel sont générés par l'application (variante Premium uniquement).
Ce sont des codes-barres 2D, au format PDF417. Voici un exemple :
Dans un éditeur de texte, en scannant ce code-barre avec votre douchette, vous devriez voir apparaître la chaîne de caractères suivante :
^#[00000000001|00000000002]#$
Si c'est le cas, alors votre douchette est correctement paramétrée 👍.
Sinon, il faudrait la configurer pour le format PDF417 et la langue qui correspond à la disposition de votre clavier.
Authentification unique (SSO) via CAS ou SAML2 ( Premium)
Vous avez la possibilité d’utiliser un système d’authentification unique via un serveur CAS, et / ou SAML2.
Pour cela, vous devez bien sûr autoriser l'instance du logiciel à accéder à votre serveur CAS ou SAML2, et le paramétrer correctement. Ensuite, vous pouvez activer la fonctionnalité en renseignant la section suivante du fichier /src/App/Config/settings.json
:
"auth": {
"cookie": "auth",
"CAS": {
"enabled": true,
"host": "your.cas.server",
"uri": "/cas",
"port": 8080,
"cert": false,
"attributes": {
"pseudo": "givenName",
"email": ["mail", "email"],
"firstName": "firstName",
"lastName": "lastName",
"group": "group"
},
"groupsMapping": {
"MonGroupeBeneficiaireCAS": "visitor"
},
"beneficiaryGroups": ["MonGroupeBeneficiaireCAS"],
"defaultGroup": null,
"nonCASUserLinking": true
},
"SAML2": {
"enabled": true,
"signRequests": false,
"signingCert": {
"key": "La clé du certificat de votre instance du logiciel",
"cert": "Le certificat de votre instance du logiciel, encodé en base64"
},
"idp": {
"entityId": "URL de l'Identity Provider",
"singleSignOnServiceUrl": "URL du service de login",
"singleLogoutServiceUrl": "URL du service de logout",
"signingCert": "Le certificat de votre Identity Provider"
},
"attributes": {
"pseudo": "givenName",
"email": ["mail", "email"],
"firstName": "first_name",
"lastName": "last_name",
"group": "group"
},
"beneficiaryGroups": ["MonGroupeBeneficiaireSAML2"],
"groupsMapping": {
"Administrateur": "admin",
"MonGroupeBeneficiaireSAML2": "visitor"
},
"defaultGroup": null,
"nonSAMLUserLinking": true,
"disableUnsolicitedRequests": false,
"proxyVars": false
}
},
Retrouvez le détail de chaque paramètre du fichier de configuration dans cette section.
Pour activer l'une ou l'autre (ou les deux) méthodes d'authentification, il faut utiliser le paramètre enabled
des clés auth.cas
et/ou auth.saml2
, en lui mettant la valeur true
.
CAS
Voici le détail de chaque paramètre qu'il vous faudra renseigner pour faire fonctionner la SSO avec CAS Dans Loxya.
host
Il s'agit du nom d'hôte de votre serveur CAS. Par exemple cas.votre-domaine.com
port
Le numéro de port à utiliser pour la connexion au serveur CAS. Par défaut, 8443
.
uri
L'URI à laquelle le serveur CAS répond. Par exemple, /cas
.
cert
Le certificat du serveur CAS. Cette option accepte plusieurs valeurs :
false
: Désactive la verification SSL du serveur CAS.- Le chemin vers le fichier de certificat au format PEM.
Mapping des attributs
L'option attributes
permet de mettre en correspondance les données attendues pour créer un utilisateur dans Loxya, avec les attributs qui sont renvoyés dans la réponse du fournisseur d'identité (IdP).
La valeur de ce paramètre attend un tableau associatif (objet JSON) qui contient les clés suivantes :
pseudo
: l'attribut à utiliser pour créer le pseudo de l'utilisateur. Par exemple,givenName
.email
: l'attribut à utiliser pour créer l'adresse e-mail de l'utilisateur.group
: l'attribut à utiliser pour créer le rôle de l'utilisateur. Par exemple,group
ourole
.firstName
: l'attribut à utiliser pour créer le prénom de l'utilisateur. Par exemple,firstName
.lastName
: l'attribut à utiliser pour créer le nom de famille de l'utilisateur. Par exemple,lastName
.
Si vous spécifiez un tableau en valeur de l'une de ces clés, la valeur de la clé sera cherché dans tous les attributs correspondants. Dès qu'un de ces attributs existe, c'est cette valeur qui sera utilisée.
Par exemple, si vous définissez : "email": ["mail", "e-mail"]
, l'attribut mail
sera recherché pour l'adresse e-mail de l'utilisateur. Si cet attribut n'existe pas ou qu'il est vide, alors c'est l'attribut e-mail
sera recherché. Si aucun attribut n'est trouvé, alors une valeur de remplacement par défaut sera utilisée quand c'est possible (pour l'email ce sera un email fictif / interne à l'application par exemple).
Groupe(s) liés aux bénéficiaires
Le paramètre beneficiaryGroups
permet de définir un (ou plusieurs) groupes CAS qui, si présents dans l'attribut de groupe retourné par le fournisseur d'identité (voir l'attribut "group" ci-dessus), feront de l'utilisateur un bénéficiaire pouvant réserver via la réservation publique (si cette fonctionnalité est activée et disponible).
Si la valeur de cette option est null
(c'est le cas par défaut), la fonctionnalité sera désactivée (= pas de création de profils bénéficiaire lors de la connexion CAS). Il est à noter que ceci ne remplace pas la récupération du groupe dont il est fait mention ci-dessous. Cette option permet seulement d'indiquer que l'utilisateur est aussi un bénéficiaire.
Vous avez également la possibilité d'utiliser un caractère « wildcard » (joker) pour ce paramètre, c'est à dire le caractère *
. Ainsi, tout utilisateur qui se connecte pour la première fois via CAS aura un compte bénéficiaire associé, peu importe son groupe CAS. Cela est aussi utile si votre serveur CAS ne remonte pas les groupes des utilisateurs.
À vous ensuite de choisir dans quel groupe vous voulez le mettre du côté de Loxya via l'option groupsMapping
et/ou defaultGroup
.
Exemples de valeur :
"MonGroupeBénéficiaireCAS"
["MonGroupeBénéficiaireCAS1", "MonGroupeBénéficiaireCAS2"]
*
Mapping des groupes / rôles
Le paramètre groupsMapping
permet de mettre en correspondance un groupe Loxya avec un groupe provenant de l'attribut de groupe retourné par le fournisseur d'identité (voir l'attribut "group" ci-dessus).
Les rôles Loxya disponibles sont les suivants :
administration
: Administration,management
: Gestion,readonly-planning-general
: Consultation du planning général,readonly-planning-self
: Consultation de son propre planning,external
: Externe (accès aux demandes de réservation uniquement).
Exemple de valeur : ["MonGroupeBénéficiaireCAS" => "external"]
.
Le paramètre defaultGroup
permet de définir un rôle à l'utilisateur même si aucune correspondance n'a été trouvée avec l'attribut fourni via le groupsMapping
ci-dessus.
- Si la valeur de cette option est non
null
, l'utilisateur sera automatiquement assigné à ce groupe ci. - Si la valeur est
null
, l'utilisateur ne sera pas autorisé à se connecter.
Rattachement des utilisateurs existants
En activant le paramètre nonCASUserLinking
(en le mettant sur true
), vous activez le rattachement des utilisateurs CAS avec les utilisateurs existants.
Si cette option est activée, un utilisateur CAS qui se connecte avec une adresse e-mail déjà connue par Loxya pour un utilisateur non lié à SAML sera automatiquement rattaché à cet utilisateur, et disposera de ses autorisations.
Si cette option est désactivée, les utilisateurs CAS ayant déjà un compte non CAS dans l'application seront rejetés.
SAML 2.0
Voici le détail de chaque paramètre qu'il vous faudra renseigner pour faire fonctionner la SSO avec SAML 2.0 dans Loxya.
signRequests
Il s'agit d'une option qui permet d'activer ou non la signature des requêtes envoyées au fournisseur d'identité (IdP). Le certificat utilisé pour signez ces requêtes est un certificat x509 fourni dans le paramètre signingCert
(voir ci-dessous).
Par défaut, cette option est désactivée (= false
). Vous pouvez l'activer (en la mettant à true
) si votre IdP exige des requêtes sécurisées.
signingCert
Le paramètre auth.SAML2.signinCert
et ses clés key
et cert
servent à renseigner le certificat qui sera utilisé pour signer les requêtes (et les réponses) au fournisseur d'identité. Ce certificat doit-être fourni, que la signature des requêtes (c'est à dire le paramètre signRequests
ci-dessus) soit activée ou non.
Vous pouvez générer ces deux valeurs via la commande suivante (attention à bien remplacer ce qui se trouve entre crochets par le nom de domaine de votre instance de Loxya) :
openssl req \
-x509 -nodes -days 3652 -new -newkey rsa:3072 \
-subj '/CN=[Hôte de l'instance de Loxya]/C=FR' \
-keyout signingCert.key \
-out signingCert.crt
La commande ci-dessus générera deux fichiers à l'endroit ou elle est exécutée :
- Un fichier
signingCert.key
dont le contenu doit être mis en valeur designingCert.key
.
Pour cela, récupérez son contenu via :awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' ./signingCert.key | pbcopy
Ceci devrait produire une chaîne commençant par-----BEGIN PRIVATE KEY-----\n
. - Un fichier
signingCert.crt
dont le contenu doit être mis en valeur designingCert.cert
.
Pour cela, récupérez son contenu via :awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' ./signingCert.crt | pbcopy
Ceci devrait produire une chaîne commençant par-----BEGIN CERTIFICATE-----\n
.
NOTE : Les fichiers générés ci-dessus ne seront pas utilisés par l'application directement donc vous pouvez en disposer comme vous voulez.
Le fournisseur d'identité (IdP)
Les 4 paramètres se trouvant dans auth.SAML2.idp
servent à définir les URLs et le certificat que Loxya devra utiliser pour effectuer l'authentification des utilisateurs via SAML 2.0 auprès de votre IdP ("Identity Provider").
entityId
Il s'agit de l'URI de votre fournisseur d'identité. Généralement, cette URI ressemble à https://[idp-url]/metadata
.
singleSignOnServiceUrl
Il s'agit de l'URL d'accès à la connexion ("Single Sign On", ou "SSO") du fournisseur d'identité. Généralement, elle ressemble à https://[idp-url]/sso
.
singleLogoutServiceUrl
Il s'agit de l'URL d'accès à la déconnexion ("Single Logout Service", ou "SLS") du fournisseur d'identité. Généralement, elle ressemble à https://[idp-url]/sls
.
signinCert
Le paramètre auth.SAML2.idp.signinCert
renseigne le certificat public du fournisseur d'identité (IdP). Il attend une chaîne de caractère, que vous pouvez récupérer à partir du fichier de certificat public de l'IdP (au format PEM), en exécutant la commande suivante :
awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' "[le fichier du certificat].crt" | pbcopy
Ceci devrait produire une chaîne commençant par -----BEGIN CERTIFICATE-----\n
. C'est cette chaîne qu'il faut renseigner dans le paramètre auth.SAML2.idp.signinCert
.
Mapping des attributs
L'option attributes
permet de mettre en correspondance les données attendues pour créer un utilisateur dans Loxya, avec les attributs qui sont renvoyés dans la réponse du fournisseur d'identité (IdP).
La valeur de ce paramètre attend un tableau associatif (objet JSON) qui contient les clés suivantes :
pseudo
: l'attribut à utiliser pour créer le pseudo de l'utilisateur. Par exemple,givenName
.email
: l'attribut à utiliser pour créer l'adresse e-mail de l'utilisateur.group
: l'attribut à utiliser pour créer le rôle de l'utilisateur. Par exemple,group
ourole
.firstName
: l'attribut à utiliser pour créer le prénom de l'utilisateur. Par exemple,firstName
.lastName
: l'attribut à utiliser pour créer le nom de famille de l'utilisateur. Par exemple,lastName
.
Si vous spécifiez un tableau en valeur de l'une de ces clés, la valeur de la clé sera cherché dans tous les attributs correspondants. Dès qu'un de ces attributs existe, c'est cette valeur qui sera utilisée.
Par exemple, si vous définissez : "email": ["mail", "e-mail"]
, l'attribut mail
sera recherché pour l'adresse e-mail de l'utilisateur. Si cet attribut n'existe pas ou qu'il est vide, alors c'est l'attribut e-mail
sera recherché. Si aucun attribut n'est trouvé, alors une valeur de remplacement par défaut sera utilisée quand c'est possible (pour l'email ce sera un email fictif / interne à l'application par exemple).
Groupe(s) liés aux bénéficiaires
Le paramètre beneficiaryGroups
permet de définir un (ou plusieurs) groupes SAML 2.0 qui, si présents dans l'attribut de groupe retourné par le fournisseur d'identité (voir l'attribut "group" ci-dessus), feront de l'utilisateur un bénéficiaire pouvant réserver via la réservation publique (si cette fonctionnalité est activée et disponible).
Si la valeur de cette option est null
(c'est le cas par défaut), la fonctionnalité sera désactivée (= pas de création de profils bénéficiaire lors de la connexion SAML 2.0). Il est à noter que ceci ne remplace pas la récupération du groupe dont il est fait mention ci-dessous. Cette option permet seulement d'indiquer que l'utilisateur est aussi un bénéficiaire.
Vous avez également la possibilité d'utiliser un caractère « wildcard » (joker) pour ce paramètre, c'est à dire le caractère *
. Ainsi, tout utilisateur qui se connecte pour la première fois via SAML 2.0 aura un compte bénéficiaire associé, peu importe son groupe. Cela est aussi utile si votre IdP ne remonte pas correctement les groupes des utilisateurs.
À vous ensuite de choisir dans quel groupe vous voulez le mettre du côté de Loxya via l'option groupsMapping
et/ou defaultGroup
.
Exemples de valeur :
"MonGroupeBénéficiaireSAML"
["MonGroupeBénéficiaireSAML1", "MonGroupeBénéficiaireSAML2"]
*
Mapping des groupes / rôles
Le paramètre groupsMapping
permet de mettre en correspondance un groupe Loxya avec un groupe provenant de l'attribut de groupe retourné par le fournisseur d'identité (voir l'attribut "group" ci-dessus).
Les rôles Loxya disponibles sont les suivants :
administration
: Administration,management
: Gestion,readonly-planning-general
: Consultation du planning général,readonly-planning-self
: Consultation de son propre planning,external
: Externe (accès aux demandes de réservation uniquement).
Exemple de valeur : ["MonGroupeBénéficiaireSAML" => "external"]
.
Le paramètre defaultGroup
permet de définir un rôle à l'utilisateur même si aucune correspondance n'a été trouvée avec l'attribut fourni via le groupsMapping
ci-dessus.
- Si la valeur de cette option est non
null
, l'utilisateur sera automatiquement assigné à ce groupe ci. - Si la valeur est
null
, l'utilisateur ne sera pas autorisé à se connecter.
Rattachement des utilisateurs existants
En activant le paramètre nonSAMLUserLinking
(en le mettant sur true
), vous activez le rattachement des utilisateurs SAML 2.0 avec les utilisateurs existants.
Si cette option est activée, un utilisateur SAML 2.0 qui se connecte avec une adresse e-mail déjà connue par Loxya pour un utilisateur non lié à SAML sera automatiquement rattaché à cet utilisateur, et disposera de ses autorisations.
Si cette option est désactivée, les utilisateurs SAML ayant déjà un compte non SAML dans l'application seront rejetés.
Permettre à l'IdP de connecter / déconnecter une session Loxya
Le paramètre disableUnsolicitedRequests
permet de désactiver la prise en charge des requêtes de connexion / déconnexion qui proviennent du fournisseur d'identité sans que l'utilisateur soit passé par Loxya pour provoquer ces actions.
Par défaut, cette option est sur false
, c'est à dire que l'IdP peut déconnecter un utilisateur qui serait en train d'utiliser Loxya.
Définir un Proxy
Le paramètre proxyVars
permet d'utiliser les headers X-Forwarded-*
/ HTTP_X_FORWARDED_PROTO
pour déterminer le port / domaine / protocole.
Ceci est utile notamment si l'application tourne derriere un load balancer qui met fin au protocole SSL.
Coefficient de tarif dégressif
Obsolète : Depuis la version
1.0
, plusieurs coefficients de tarif dégressif sont paramétrables, directement dans les paramètres du logiciel.
Le fichier de configuration en détail
Ce fichier est créé automatiquement par l'assistant d'installation, mais en cas de modification il est bon de savoir à quoi servent ses composantes.
Important
Veillez bien à ne pas casser la structure du fichier de configuration, car cela pourrait rendre le logiciel complètement inutilisable.
Voici un exemple de contenu de ce fichier de configuration principal, expliqué ligne par ligne dans un tableau, en dessous :
{
"baseUrl": "https://example-loxya.net",
"enableCORS": false,
"displayErrorDetails": false,
"useRouterCache": true,
"JWTSecret": "super_long_secret_string_to_never_commit",
"httpAuthHeader": "Authorization",
"maxItemsPerPage": 100,
"sessionExpireHours": 12,
"defaultLang": "fr",
"billingMode": "partial",
"healthcheck": false,
"colorSwatches": null,
"proxy": {
"enabled": false,
"host": "proxy.loxya.test",
"port": 3128
},
"currency": "EUR",
"db": {
"host": "localhost",
"port": 3306,
"database": "loxya",
"username": "myuser",
"password": "mypassword",
"prefix": ""
},
"companyData": {
"name": "Votre société",
"logo": "votre_logo.jpg",
"street": "32, rue du matoss",
"zipCode": "75000",
"locality": "Paris",
"country": "France",
"phone": "+33 (0)1 23 45 67 89",
"email": "contact@your-company.com",
"vatNumber": "FR78945612300",
"vatRate": 20,
"legalNumbers": [
{
"name": "SIRET",
"value": "123 456 789 00001"
},
{
"name": "APE",
"value": "947A"
}
]
},
"logger": {
"timezone": "Europe/Paris",
"level": 100,
"max_files": 3
},
"maxFileUploadSize": 26214400,
"authorizedFileTypes": ["application/pdf", "application/zip", "text/csv", "..."],
//////////////////////////////////////////////////
// La suite est spécifique à la variante Premium :
//////////////////////////////////////////////////
"handScanner": {
"scanTimeout": 100,
"inputLayout": "azerty"
},
"colorSwatches": [
"#f5006b",
"#06b5a9",
"#0004ff",
"#f8ad14",
"#ffe78e",
"#9fde3f",
"#ff0000",
"#ff6e21",
"#909090"
],
"notifications": {
"overdue": {
"enabled": false,
"days": [1, 15, 22, 27, 30],
"lookBackMaxMonths": 2
},
"preparers": {
"enabled": false,
"daysBefore": 1
}
},
"email": {
"from": {
"email": "noreply@example.com",
"name": "Notification Loxya"
},
"driver": "mail",
"smtp": {
"host": "localhost",
"port": 1025,
"username": null,
"password": null,
"security": ""
},
"mailjet": {
"apiKey": "mailjet-api-key",
"apiSecretKey": "mailjet-api-secret"
}
},
"auth": {
"cookie": "auth",
"CAS": {
"enabled": false,
"host": "cas.robert2.local",
"port": 8080,
"uri": "/cas",
"cert": false,
"attributes": {
"pseudo": "givenName",
"email": ["mail", "email"],
"firstName": "first_name",
"lastName": "last_name",
"group": "group"
},
"beneficiaryGroups": null,
"groupsMapping": {},
"defaultGroup": null,
"nonCASUserLinking": true
},
"SAML2": {
"enabled": false,
"signRequests": false,
"signingCert": {
"key": null,
"cert": null
},
"idp": {
"entityId": null,
"singleSignOnServiceUrl": null,
"singleLogoutServiceUrl": null,
"signingCert": null
},
"attributes": {
"pseudo": "givenName",
"email": ["mail", "email"],
"firstName": "first_name",
"lastName": "last_name",
"group": "group"
},
"beneficiaryGroups": null,
"groupsMapping": {},
"defaultGroup": null,
"nonSAMLUserLinking": true,
"disableUnsolicitedRequests": false,
"proxyVars": false
}
}
}
Clé | Description | Type de valeur | Valeur par défaut |
---|---|---|---|
baseUrl | Adresse web (URL) de l'application | string | [URL actuel] |
enableCORS | Activer le "Cross Origin Resource Sharing" | boolean | false |
displayErrorDetails | Afficher le détail des erreurs (stack trace) | boolean | false |
useRouterCache | Utiliser le cache du router de Slim3 | boolean | true |
JWTSecret | Passphrase utilisée pour la création du JWT (Json Web Token) | string | [Valeur aléatoire] |
httpAuthHeader | Nom du header utilisé pour l'authentification des requêtes | string | "Authorization" |
maxItemsPerPage | Nombre d'enregistrements retournés par pages pour la pagination | integer | 100 |
sessionExpireHours | Nombre d'heures avant expiration d'une session utilisateur. Attention, ne pas utiliser la valeur 0 , car cela risque de faire planter le login ! |
integer | 12 |
defaultLang | Langue de l'interface par défaut (en étant non connecté) | "fr" ou "en" | "fr" |
currency | Devise utilisée pour les montants (code ISO de la devise) | string | "EUR" |
billingMode | Le mode d'utilisation de la facturation. Trois valeurs possibles : - all : facturation de tous les événements,- partial : facturation des événements facturables uniquement,- none : pas de facturation du tout (mode prêt) |
string | "partial" |
healthcheck | Détermine si la route /healthcheck est activée ou non.Cette route permet de savoir si l'API est accessible. Elle retourne la date de dernière modification. |
boolean | false |
colorSwatches | Liste des couleurs personnalisées, à utiliser dans le color-picker de de l'étape 1 de l'édition des événements. Exemple : ["#f5006b", "#06b5a9", "#365576"] . |
array (ou null) | null |
proxy | Utilisation d'un proxy : un objet contenant les données du proxy | object | |
→ proxy.enabled | Activation du proxy ou non | boolean | false |
→ proxy.host | Nom d'hôte du proxy | string | |
→ proxy.port | Numéro du port du proxy | number | |
db | Informations de connection à la base de données MySQL | object | |
→ db.host | Le nom du serveur hôte à utiliser pour la connexion MySQL | string | "localhost" |
→ db.port | Le numéro de port du serveur hôte pour la connexion MySQL | string | 3306 |
→ db.username | Le nom de l'utilisateur MySQL à utiliser pour la connexion à la base de données | string | "root" |
→ db.password | Le mot de passe de l'utilisateur MySQL | string | "" |
→ db.database | Le nom de la base de données | string | "robert2" |
→ db.prefix | Un préfixe éventuel à ajouter devant chaque nom de table de la base de données | string | "" |
companyData | Informations de la société pour la création des documents (devis, factures...) | object | |
→ companyData.name | Raison sociale (nom) de la société | string | "" |
→ companyData.logo | Nom du fichier (image JPG ou PNG) du logo la société, à placer dans le dossier src/public/img/ |
string (ou null) | null |
→ companyData.street | Adresse postale (rue et numéro) de la société | string | "" |
→ companyData.zipCode | Code postal de la société | string | "" |
→ companyData.locality | Localité (ville ou village) de la société | string | "" |
→ companyData.country | Pays de la société | string | "" |
→ companyData.phone | Numéro de téléphone de la société | string | "" |
→ companyData.email | Adresse email de contact de la société | string | "" |
→ companyData.vatNumber | Numéro de TVA intracommunautaire de la société | string | "" |
→ companyData.vatRate | Taux de TVA applicable dans les factures | number (float) | 0.0 |
→ companyData.legalNumbers | Numéros légaux supplémentaires pour affichage sur les documents (devis et factures) | object | |
→ companyData.legalNumbers.0.name | Type du premier numéro légal (nom ou acronyme) | string | "SIRET" |
→ companyData.legalNumbers.0.value | Valeur du premier numéro légal | string | "" |
→ companyData.legalNumbers.1.name | Type du second numéro légal (nom ou acronyme) | string | "APE" |
→ companyData.legalNumbers.1.value | Valeur du second numéro légal | string | "" |
logger | Paramétrage du logging (fichiers de logs du système, voir dans /src/var/logs ) |
object | |
→ logger.timezone | La timezone à utiliser pour l'horodatage dans les fichiers de log | string | "Europe/Paris" |
→ logger.level | Le niveau de log à utiliser (voir cette documentation.) | number | 250 |
→ logger.max_files | Le nombre maximum de fichiers de log à conserver | number | 10 |
Les éléments suivants sont spécifiques à la variante Premium :
Clé | Description | Type de valeur | Valeur par défaut |
---|---|---|---|
handScanner | Paramétrage du scanner de code-barres | object | |
→ handScanner.scanTimeout | Le temps (en millisecondes) permettant de détecter un scan de code-barre | number | 100 |
→ handScanner.inputLayout | Le type de clavier à émuler (doit être similaire à celui utilisé par les utilisateurs) | string | "qwerty" |
notifications | Paramétrage des notifications | object | |
→ notifications.overdue | Notifications en cas de non retour du matériel à temps par les bénéficiaires | object | |
→ notifications.overdue.enabled | Activation de ce type de notification | boolean | false |
→ notifications.overdue.days | Liste du nombre de jours après lesquels il faut envoyer une notification tant que le matériel n'est pas restitué. Après la dernière valeur, une notification est envoyée tous les jours. | array | [1,15,22,27,30] |
→ notifications.overdue.lookBackMaxMonths | Nombre maximum de mois pendant lesquels une notification est envoyée tous les jours après le dernier jour spécifié dans days (voir ci-dessus). |
number | 2 |
→ notifications.preparers | Notifications des préparateurs de commande avant un événement | object | |
→ notifications.preparers.enabled | Activation de ce type de notification | boolean | false |
→ notifications.preparers.daysBefore | Nombre de jours avant la date de l'événement pour envoyer la notification. | number | 1 |
Paramétrage de l'envoi des e-mails | object | ||
→ email.from | Nom et adresse e-mail de l'expéditeur. Peut aussi être une simple chaîne de caractère (devant être une adresse e-mail valide). |
object (ou string) | "" |
→ email.from.email | Adresse e-mail de l'expéditeur | string | |
→ email.from.name | Nom de l'expéditeur | string | |
→ email.driver | Type de système à utiliser pour l'envoi des e-mails. Peut être soit mail , soit smtp , soit mailjet (voir ci-dessous) |
string | "mail" |
→ email.smtp | Pour une utilisation du système d'envoi smtp (voir ci-dessus) |
object | |
→ email.smtp.host | Nom d'hôte du serveur SMTP à utiliser | string | "localhost" |
→ email.smtp.port | Numéro du port SMTP à utiliser | number | 1025 |
→ email.smtp.username | Nom d'utilisateur pour le compte SMTP à utiliser | string (ou null) | null |
→ email.smtp.password | Mot de passe pour le compte SMTP | string (ou null) | null |
→ email.smtp.security | Type de cryptage à utiliser pour SMTP. Peut être une chaîne vide, ou tls , ou ssl |
string | "" |
→ email.mailjet | Pour une utilisation de l'API de Mailjet pour envoyer les e-mails | object | |
→ email.mailjet.apiKey | Votre clé d'API fournie par Mailjet | string (ou null) | null |
→ email.mailjet.apiSecretKey | Votre clé secrète fournie par Mailjet | string (ou null) | null |
auth | Paramétrage de l'authentification | object | |
→ auth.cookie | Nom du cookie à utiliser pour le stockage de session. | string | "auth" |
→ auth.CAS | Paramétrage de l'authentification CAS. | object | |
→ auth.CAS.enabled | Pour activer l'authentification unifiée (SSO) via un serveur CAS. | boolean | false |
→ auth.CAS.host | Nom complet du serveur CAS hôte. | string | "cas.robert2.local" |
→ auth.CAS.port | Numéro du port pour accéder au serveur CAS. | number | 8443 |
→ auth.CAS.uri | Chemin vers l'authentification sur le serveur CAS. | string | "/cas" |
→ auth.CAS.cert | Pour activer ou non la récupération du certificat SSL. | boolean | false |
→ auth.CAS.attributes | Paramétrage fin de la correspondance des attributs CAS pour la création des utilisateurs dans Loxya. Peuvent être soit une chaîne de caractère, soit un tableau. Si c'est un tableau, le premier attribut trouvé avec une valeur non nulle sera utilisé. | object | |
→ auth.CAS.attributes.pseudo | Les noms des attributs CAS à utiliser pour construire le pseudo de l'utilisateur. | string (ou array) | "givenName" |
→ auth.CAS.attributes.email | Les noms des attributs CAS à utiliser pour construire l'adresse email de l'utilisateur. | string (ou array) | ["mail", "email"] |
→ auth.CAS.attributes.group | Les noms des attributs CAS à utiliser pour choisir le groupe de l'utilisateur. | string (ou array) | "group" |
→ auth.CAS.attributes.firstName | Les noms des attributs CAS à utiliser pour construire le prénom de l'utilisateur. | string (ou array) | "first_name" |
→ auth.CAS.attributes.lastName | Les noms des attributs CAS à utiliser pour construire le nom de famille de l'utilisateur. | string (ou array) | "last_name" |
→ auth.CAS.beneficiaryGroups | Un (ou plusieurs) groupe(s) CAS dont la présence permettra de créer un bénéficiaire en même temps que l'utilisateur. | string (ou array) (ou null) | null |
→ auth.CAS.groupsMapping | Un tableau de correspondance entre les groupes CAS et les groupes des utilisateurs de Loxya. Par exemple : { "Administrateur": "admin", "Etudiant": "external" } |
object | {} |
→ auth.CAS.defaultGroup | Le groupe utilisateur de Loxya à utiliser si aucun groupe CAS n'a été trouvé dans groupsMapping (voir ci-dessus).Si null , l'utilisateur ne sera pas autorisé à se connecter. |
string (ou null) | null |
→ auth.CAS.nonCASUserLinking | Quand un utilisateur se connecte via CAS pour la première fois alors qu'un utilisateur existe déjà avec la même adresse e-mail, détermine si le système doit le lier à son compte CAS ou non. | boolean | true |
→ auth.SAML2 | Paramétrage de l'authentification SAML 2.0. | object | |
→ auth.SAML2.enabled | Pour activer l'authentification unifiée (SSO) en utilisant SAML 2.0. | boolean | false |
→ auth.SAML2.signRequests | Détermine si les requêtes envoyées au fournisseur d'identité (IDP) doivent être signées ou non. | boolean | false |
→ auth.SAML2.signingCert | Le certificat qui sera utilisé pour signer les requêtes et les réponses au fournisseur d'identité (IDP). Obligatoire, même si la signature des requête est désactivée. |
object | |
→ auth.SAML2.signingCert.key | Le contenu d'un fichier "signinCert.key" valide (généré via openssl ). |
string | null |
→ auth.SAML2.signingCert.cert | Le contenu d'un fichier "signinCert.crt" valide (généré via openssl ). |
string | null |
→ auth.SAML2.ipd | Configuration du fournisseur d'identité (IdP). | object | |
→ auth.SAML2.ipd.entityId | Identifiant (URI) du fournisseur d'identité. | string | null |
→ auth.SAML2.ipd.singleSignOnServiceUrl | L'URL de l'endpoint SSO (= Connexion) du fournisseur d'identité. | string | null |
→ auth.SAML2.ipd.singleLogoutServiceUrl | L'URL de l'endpoint SLS (= Déconnexion) du fournisseur d'identité. | string | null |
→ auth.SAML2.ipd.signingCert | Le contenu du certificat public du fournisseur d'identité. | string | null |
→ auth.SAML2.attributes | Paramétrage fin de la correspondance des attributs SAML2 pour la création des utilisateurs dans Loxya. Peuvent être soit une chaîne de caractère, soit un tableau. Si c'est un tableau, le premier attribut trouvé avec une valeur non nulle sera utilisé. | object | |
→ auth.SAML2.attributes.pseudo | Les noms des attributs SAML2 à utiliser pour construire le pseudo de l'utilisateur. | string (ou array) | "givenName" |
→ auth.SAML2.attributes.email | Les noms des attributs SAML2 à utiliser pour construire l'adresse email de l'utilisateur. | string (ou array) | ["mail", "email"] |
→ auth.SAML2.attributes.group | Les noms des attributs SAML2 à utiliser pour choisir le groupe de l'utilisateur. | string (ou array) | "group" |
→ auth.SAML2.attributes.firstName | Les noms des attributs SAML2 à utiliser pour construire le prénom de l'utilisateur. | string (ou array) | "first_name" |
→ auth.SAML2.attributes.lastName | Les noms des attributs SAML2 à utiliser pour construire le nom de famille de l'utilisateur. | string (ou array) | "last_name" |
→ auth.SAML2.beneficiaryGroups | Un (ou plusieurs) groupe(s) SAML2 dont la présence permettra de créer un bénéficiaire en même temps que l'utilisateur. | string (ou array) (ou null) | null |
→ auth.SAML2.groupsMapping | Un tableau de correspondance entre les groupes SAML2 et les groupes des utilisateurs de Loxya. Par exemple : { "Administrateur": "admin", "Etudiant": "external" } |
object | {} |
→ auth.SAML2.defaultGroup | Le groupe utilisateur de Loxya à utiliser si aucun groupe SAML2 n'a été trouvé dans groupsMapping (voir ci-dessus).Si null , l'utilisateur ne sera pas autorisé à se connecter. |
string (ou null) | null |
→ auth.SAML2.nonSAMLUserLinking | Quand un utilisateur se connecte via SAML2 pour la première fois alors qu'un utilisateur existe déjà avec la même adresse e-mail, détermine si le système doit le lier à son compte SAML2 ou non. | boolean | true |
→ auth.SAML2.disableUnsolicitedRequests | Détermine si Loxya doit prendre en charge les requêtes de connexion / déconnexion provenant du fournisseur d'identité sans que l'utilisateur soit passé par Loxya. | boolean | false |
→ auth.SAML2.proxyVars | Permet d'utiliser les headers X-Forwarded-* / HTTP_X_FORWARDED_PROTO pour déterminer le port / domaine / protocole. Ceci est utile notamment si l'application tourne derriere un load balancer qui met fin au protocole SSL. |
boolean | false |
Personnaliser les devis et factures
Il est possible de personnaliser la présentation des devis et factures, en modifiant les fichiers suivants :
- Pour les devis :
src/views/pdf/estimate.twig
- Pour les factures :
src/views/pdf/invoice.twig
.
Il s'agit d'un fichier écrit en HTML, il faut donc maîtriser ce langage. Le système de template utilisé est Twig 3 . Le système fourni des variables permettant d'afficher les diverses données de la facture. Pour utiliser une variable, il suffit d'écrire son nom entre double-accolades, comme ceci : {{ variable }}
, ou {{ variable.name }}
.
Voici la liste des variables disponibles :
Variable | Description | Type |
---|---|---|
locale |
Langue utilisée pour les traductions (fr , ou en ). |
string |
number |
Numéro de la facture. | string |
date |
Date du devis ou de la facture. | DateTime* |
currency |
Devise utilisée (code ISO, par ex. EUR ). |
string |
isLegacy |
Le document a-t-il été généré avant la version 1.0 ? | boolean |
hasTaxes |
Le document comporte-t-il une ou des taxe(s) ? | boolean |
hasMaterialDiscount |
Y a-t-il des remises dans la liste du matériel ?. | boolean |
degressiveRate |
Coefficient de tarif dégressif (uniquement si isLegacy = true ). |
float** |
dailyTotal |
Montant total par jour (uniquement si isLegacy = true ). |
float** |
hasGlobalDiscount |
Y a-t-il une remise globale ?. | boolean |
globalDiscountRate |
Taux de la remise globale (en %). | float** |
totalWithoutGlobalDiscount |
Montant total hors remise globale. | float** |
totalGlobalDiscount |
Montant total de la remise. | float** |
totalWithoutTaxes |
Montant total hors taxes. | float** |
totalTaxes |
Montant total des taxes. | float** |
totalWithTaxes |
Montant total toutes taxes comprises. | float** |
categoriesSubTotals |
Sous-totaux par catégories. | Array |
seller |
Informations de votre société (voir ci-dessous). |
Array |
seller.name |
Nom de votre société. | string |
seller.street |
Adresse de votre société (rue et n°). | string |
seller.zip_code |
Code postal de votre société. | string |
seller.locality |
Ville de votre société. | string |
seller.country |
Pays de votre société. | string |
seller.phone |
Numéro de téléphone de votre société. | string |
seller.email |
Adresse e-mail de contact de votre société. | string |
seller.vat_number |
Le numéro de T.V.A. de votre société. | string |
seller.legal_numbers |
Numéros spéciaux de votre société. (Par exemple, n° SIRET ou code APE, voir fichier de config). Pour chaque numéro, les clés name et value sont disponibles. |
Array |
beneficiary |
Le bénéficiaire de l'événement. | Array |
beneficiary.full_name |
Nom complet du bénéficiaire. | string |
beneficiary.street |
Adresse (rue et numéro) du bénéficiaire. | string |
beneficiary.postal_code |
Code postal du bénéficiaire. | string |
beneficiary.locality |
Ville du bénéficiaire. | string |
booking |
Informations de l'événement à facturer (voir ci-dessous). |
Array |
booking.title |
Titre (nom) de l'événement. | string |
booking.period.start |
Période de l'événement : date de début. | DateTime* |
booking.period.end |
Période de l'événement : date de fin. | DateTime* |
booking.period.isFullDays |
Période de l'événement : à la journée ? Si false , alors c'est à l'heure près. |
boolean |
booking.location |
Localisation (lieu) de l'événement. | string |
categoriesSubTotals |
Sous-totaux par catégories (voir ci-dessous). |
Array |
categoriesSubTotals[x][name] |
Nom de la catégorie. | string |
categoriesSubTotals[x][quantity] |
Quantité de matériel dans la catégorie. | integer |
categoriesSubTotals[x][subTotal] |
Montant total pour la catégorie. | float** |
materials |
Détail du matériel, trié par sous-catégories (voir ci-dessous). |
Array |
materials[x][subCategory] |
Nom de la sous-catégorie. | string |
materials[x][materialsList] |
Liste du matériel de la sous-catégorie (voir ci-dessous). | Array |
materials[x][materialsList][x][reference] |
Référence du matériel. | string |
materials[x][materialsList][x][name] |
Nom du matériel. | string |
materials[x][materialsList][x][quantity] |
Quantité du matériel alloué. | integer |
materials[x][materialsList][x][unit_price] |
Tarif de location (unité). | float** |
materials[x][materialsList][x][replacement_price] |
Prix de remplacement total du matériel. | float** |
materials[x][materialsList][x][total_price] |
Montant total pour le matériel. | float** |
extras |
Lignes additionnelles à facturer. | Array |
extras.description |
Description de la ligne additionnelle. | string |
extras.quantity |
Quantité de la ligne additionnelle. | number |
extras.unit_price |
Prix unitaire de la ligne additionnelle. | number |
extras.total_without_taxes |
Sous-total hors-taxes de la ligne additionnelle. | number |
extras.taxes |
Montant de la taxe de la ligne additionnelle. | number |
Personnaliser les fiches de sortie
De même que pour les devis et factures, il est possible de modifier le fichier suivant pour personnaliser les fiches de sortie :
src/views/pdf/event-summary.twig
Il s'agit également d'un fichier écrit en HTML, avec le système de template Twig 3 . Des variables permettent d'utiliser les données de l'événement ou la réservation, qu'il suffit d'écrire entre double-accolades, comme ceci : {{ variable }}
, ou {{ variable.name }}
.
Voici la liste des variables disponibles :
Variable | Description | Type |
---|---|---|
now |
Date du jour | DateTime* |
currency |
Devise de la facture (code ISO, par ex. EUR ). |
string |
locale |
Langue utilisée pour les traductions (fr , ou en ). |
string |
currencyName |
Nom de la devise de la facture (p. ex. Euro ). |
string |
sortedBy |
Le classement général du matériel (soit lists , soit parks ) |
string |
materialDisplayMode |
Le classement du matériel dans les listes (voir les paramètres) | string |
customText |
Texte personnalisé en bas de page (voir les paramètres). Contient les clés : title (le titre) et content (le texte). |
Array |
showLegalNumbers |
Les numéros légaux doivent-ils apparaître ? (voir les paramètres) | boolean |
showReplacementPrices |
Les valeurs de remplacement doivent-elles apparaître dans la liste du matériel ? (voir les paramètres) | boolean |
showDescriptions |
Les descriptions du matériel doivent-elles apparaître dans la liste ? (voir les paramètres) | boolean |
showTags |
Les tags associés au matériel doivent-ils apparaître dans la liste ? (voir les paramètres) | boolean |
showUnitsSerialNumbers |
Les numéros de série des unités du matériel doivent-ils apparaître dans la liste ? (voir les paramètres) | boolean |
showPictures |
Les photos du matériel doivent-elles apparaître dans la liste ? (voir les paramètres) | boolean |
company |
Informations de votre société. |
Array |
company.name |
Nom de votre société. | string |
company.street |
Adresse de votre société (rue et n°). | string |
company.zipCode |
Code postal de votre société. | string |
company.locality |
Ville de votre société. | string |
company.country |
Pays de votre société. | string |
company.phone |
Numéro de téléphone de votre société. | string |
company.email |
Adresse e-mail de contact de votre société. | string |
company.vatNumber |
Le numéro de T.V.A. de votre société. | string |
company.legalNumbers |
Numéros spéciaux de votre société. (Par exemple, n° SIRET ou code APE, voir fichier de config). Pour chaque numéro, les clés name et value sont disponibles. |
Array |
event |
Informations de l'événement à facturer. |
Array |
event.title |
Titre (nom) de l'événement. | string |
event.description |
Description de l'événement. | string |
event.operation_period |
Période d'exploitation de l'événement. | Period*** |
event.mobilization_period |
Période de mobilisation du matériel de l'événement. | Period*** |
event.location |
Localisation (lieu) de l'événement. | string |
event.preparer |
Le préparateur de commande de l'événement (avec full_name , email , phone ...) |
Array |
event.is_confirmed |
L'événement est-il confirmé ? | boolean |
event.total_replacement |
Le montant total des valeurs de remplacement du matériel de l'événement. | float** |
beneficiaries |
La liste des bénéficiaires de l'événement. | Array |
beneficiaries[x][full_name] |
Nom complet du bénéficiaire. | string |
beneficiaries[x][street] |
Adresse (rue et numéro) du bénéficiaire. | string |
beneficiaries[x][postal_code] |
Code postal du bénéficiaire. | string |
beneficiaries[x][locality] |
Ville du bénéficiaire. | string |
technicians |
La liste des assignations de techniciens de l'événement. | Array |
technicians[x][name] |
Nom complet du technicien. | string |
technicians[x][phone] |
Numéro de téléphone du technicien. | string |
technicians[x][assignments] |
Liste des assignations du technicien. Chaque élément contient : period (dates de l'assignation) et position (poste du technicien). |
Array |
materialsSorted |
Liste du matériel (le tri dépend de materialDisplayMode et de sortedBy ). |
Array |
materialsSorted[x][name] |
Nom de la sous-catégorie, ou du parc. | string |
materialsSorted[x][materials] |
Liste du matériel de la sous-catégorie ou du parc. | Array |
materialsSorted[x][materials][x][reference] |
Référence du matériel. | string |
materialsSorted[x][materials][x][name] |
Nom du matériel. | string |
materialsSorted[x][materials][x][quantity] |
Quantité du matériel alloué. | integer |
materialsSorted[x][materials][x][rentalPrice] |
Tarif de location (unité). | float** |
materialsSorted[x][materials][x][replacementPrice] |
Prix de remplacement total du matériel. | float** |
materialsSorted[x][materials][x][total] |
Montant total pour le matériel. | float** |
totalisableAttributes |
Totaux des caractéristiques spéciales. | Array |
totalisableAttributes[x].name |
Nom de la caractéristique spéciale. | string |
totalisableAttributes[x].value |
Valeur totale pour la caractéristique spéciale. | float** |
totalisableAttributes[x].unit |
Unité de la caractéristique spéciale. | string |
*
Les variables du type DateTime
peuvent être formatées avec le filtre format_date()
de Twig .
**
Les variables du type float
peuvent être formatées avec le filtre format_currency()
de Twig si on veut un montant en devise, ou bien le filtre format_percent_number()
si on veut un nombre en %.
***
Les variables du type Period
peuvent être formatées avec le filtre format_period(type, locale)
.