AssetHub Documentation

Questions fréquentes

Puis-je exécuter AssetHub sur l'offre Hostinger Single la moins chère ?

Oui — AssetHub est entièrement compatible avec Hostinger Single (~$2.99/mois). Single inclut PHP 8.3, MySQL, Cron Jobs natifs et SSL gratuit — tout ce dont AssetHub a besoin. Pas de SSH, pas de Composer, pas de ligne de commande. Voir la section Configuration Hostinger pour le guide pas à pas.

Ai-je besoin de compétences techniques pour l'installer ?

Non. L'installeur web gère tout : vérification des prérequis, configuration de la base de données, migrations et création du compte admin. Téléversez simplement les fichiers, visitez /install dans votre navigateur et suivez l'assistant.

Comment fonctionnent les e-mails programmés (alertes de garantie/maintenance) ?

AssetHub utilise le planificateur Laravel. Vous configurez seulement un seul cron job qui s'exécute chaque minute, et Laravel dispatche en interne chaque tâche au bon moment (quotidien 08:00, mensuel, etc.). Pour Hostinger, configurez-le dans hPanel → Avancé → Cron Jobs. Si votre hébergeur n'a pas de cron, utilisez l'URL Cron intégrée avec le service gratuit cron-job.org.

Quelles méthodes d'amortissement sont supportées ?

Trois méthodes : Linéaire (amortissement annuel constant), Dégressif (accéléré, courant pour les impôts), et Unités de production (basé sur l'usage, pour équipement industriel). Les valeurs des actifs sont rafraîchies automatiquement le 1er de chaque mois.

Le scanner QR fonctionne-t-il sur mobile ?

Oui — il utilise la caméra du navigateur via html5-qrcode et fonctionne sur tout navigateur moderne mobile/tablette/desktop. Seule exigence : HTTPS. Hostinger fournit du SSL gratuit via Let's Encrypt, donc tout fonctionne d'emblée.

Puis-je ajouter mes propres champs sans coder ?

Oui. Admin → Champs personnalisés vous permet d'ajouter des attributs illimités (texte, nombre, date, sélection, zone de texte, fichier, case à cocher), de les limiter à des catégories spécifiques, de les rendre obligatoires et de les réordonner par glisser-déposer — tout depuis l'interface.

Combien de langues AssetHub prend-il en charge ?

10 langues prêtes à l'emploi : anglais, vietnamien, espagnol, français, allemand, chinois, japonais, portugais (BR), russe et arabe (avec support RTL complet). Les traductions sont éditables depuis Admin → Translations.

Aperçu

AssetHub est un système complet de gestion d'actifs IT construit avec Laravel 11, Vue 3 et Tailwind CSS. Il aide les organisations à suivre le cycle de vie de l'équipement, gérer les affectations, planifier la maintenance, calculer l'amortissement et générer des rapports détaillés.

Suivi par QR

Génération automatique de codes QR pour chaque actif. Scannez avec n'importe quelle caméra de navigateur.

Amortissement

3 méthodes : linéaire, dégressif, unités de production.

Champs personnalisés

Ajoutez des attributs illimités — texte, date, sélection, fichier, case à cocher.

Webhooks

15 types d'événements avec signature HMAC et retry automatique.

Journal d'audit

Chaque modification enregistrée avec un visualiseur de diff complet.

Rapports

8 rapports avec graphiques, export Excel et PDF.

Prérequis serveur

  • PHP 8.2 ou supérieur
  • MySQL 5.7+ ou MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ et npm 9+
  • Serveur web : Apache ou Nginx

Extensions PHP requises

  • OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo

Espace disque

~ 200 Mo minimum. Prévoyez de l'espace supplémentaire pour les photos d'actifs et pièces jointes.

Installation

Option A — Installeur web (Recommandé)

  1. Téléversez les fichiers du projet sur votre serveur web.
  2. Pointez le document root du domaine vers public/.
  3. Définissez les permissions : storage/ et bootstrap/cache/ doivent être inscriptibles (chmod 775).
  4. Copiez .env.example vers .env et exécutez php artisan key:generate.
  5. Visitez https://yourdomain.com/install dans votre navigateur.
  6. Suivez l'assistant — Requirements → Database → Migrate → Admin Account → Done.

Option B — Installation CLI

# 1. Installer les dépendances
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Configurer l'environnement
cp .env.example .env
php artisan key:generate

# 3. Éditer .env pour les identifiants BD
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Créer les tables et données initiales
php artisan migrate --seed

# 5. Créer le lien symbolique storage pour les uploads
php artisan storage:link

# 6. Mettre la config en cache pour la production
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Marquer comme installé
echo "Installed" > storage/installed.lock
Configuration du serveur web : Le document root doit pointer vers le répertoire public/. Pour Apache, le .htaccess inclus gère la réécriture d'URL. Pour Nginx, voir le guide de déploiement Laravel.

Wizard Step 2 — Database Configuration

When the wizard reaches Step 2, you must enter the MySQL connection details for the database you created in your hosting panel. The database must already exist (it can be empty — the next wizard step will create the tables).

FieldDefault / ExampleNotes
Host127.0.0.1Works on 99% of shared hosts (Hostinger, cPanel, Plesk). Keep this default unless your hosting provides a custom MySQL hostname (managed DB services like AWS RDS, DigitalOcean Managed Database).
Port3306Standard MySQL port. Only change if your provider uses a non-standard port (rare).
Database nameuXXXXXX_assethubThe full name shown in your hosting panel. Most shared hosts prefix it with your user ID (e.g. Hostinger: u287094729_assethub).
UsernameuXXXXXX_assethubMySQL user with permissions on the database above. Do not use root — shared hosts don't allow it.
Password(your DB password)The password you set or copied when creating the MySQL user. Most hosts show it once on creation — use "View / Reset" if you didn't save it.

Where to find these credentials by hosting panel

  • Hostinger: hPanel → Databases → Management → click your database. The page shows name, username, and a "Show password" button.
  • cPanel: cPanel → MySQL Databases. The database list shows names; users are listed below. Use "Change Password" if needed.
  • Plesk: Plesk → Databases → click the database name. The detail page shows credentials and offers a password reset.
  • DirectAdmin: DirectAdmin → MySQL Management → click the database. Credentials and password reset are on the database detail page.
  • External / managed DB: AWS RDS, DigitalOcean Managed Database, etc. Use the custom hostname, port (often 3306 but verify), DB name, user, and password from your cloud console. Make sure the server's IP is whitelisted in the DB firewall.

Common errors and how to fix them

Error messageCause and fix
SQLSTATE[HY000] [1045] Access deniedWrong username or password, or the user doesn't have access to this database. Double-check spelling (including the user prefix on shared hosts). Reset the password in the hosting panel if unsure.
SQLSTATE[HY000] [1049] Unknown databaseThe database name is wrong, or you haven't created the database yet in your hosting panel. Create it first, then re-enter the exact name (including any prefix).
SQLSTATE[HY000] [2002] Connection refusedThe MySQL server can't be reached. Verify Host and Port. On shared hosts try localhost instead of 127.0.0.1 or vice versa. For managed DBs, make sure your server IP is whitelisted.
SQLSTATE[42S02] Base table not found: sessionsHappens when SESSION_DRIVER=database or CACHE_STORE=database is set in .env before the tables exist. Edit .env and change both to file, save, then reload the wizard. You can switch back to database after install if you prefer.
could not find driverPHP pdo_mysql extension is missing or disabled. Enable it in your hosting panel (PHP Configuration → Extensions). On Hostinger: hPanel → Advanced → PHP Configuration → PHP Extensions tab.
Tip: The Host and Port fields are pre-filled with the most common values (127.0.0.1 and 3306) — leave them as-is on shared hosting. You only need to type Database name, Username, and Password. Click Test & Save → to verify the connection and move to Step 3.

Localhost (Développement local)

Guide rapide pour faire tourner AssetHub sur votre machine pour des tests ou du développement avant le déploiement en production. Choisissez l'environnement adapté à votre système d'exploitation.

Recommandé : Laravel Herd est la voie la plus rapide sur macOS et Windows — pas de Docker, pas de configuration manuelle Apache/MySQL. XAMPP et Laragon sont de bonnes alternatives gratuites si vous préférez un stack traditionnel.

Option 1 — Laravel Herd (Recommandé, macOS & Windows)

Laravel Herd est l'environnement local officiel de l'équipe Laravel — gratuit, natif, sans Docker. Il intègre PHP 8.2/8.3/8.4, Nginx et (dans Herd Pro) MySQL/Redis.

  1. Téléchargez et installez Laravel Herd depuis herd.laravel.com.
  2. Placez le dossier du projet AssetHub dans ~/Herd/ (macOS) ou %USERPROFILE%\Herd\ (Windows). Herd crée automatiquement un domaine .test — p. ex. http://assethub.test.
  3. Ouvrez Herd → Sites et confirmez que la version PHP est 8.2 ou 8.3. Clic droit sur le site → Secure pour activer HTTPS (nécessaire pour le scanner QR).
  4. Créez une base de données MySQL. Avec Herd Pro, utilisez Services → MySQL → Open in TablePlus. Sinon, installez MySQL Community ou utilisez SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Copiez .env.example vers .env, remplissez les identifiants BD, puis exécutez php artisan key:generate à la racine du projet.
  6. Ouvrez http://assethub.test/install dans votre navigateur et suivez l'assistant d'installation.

Option 2 — XAMPP (Windows, macOS, Linux)

XAMPP regroupe Apache, MySQL/MariaDB et PHP. Gratuit et multiplateforme. Veillez à choisir une version avec PHP 8.2 ou plus récent.

  1. Téléchargez XAMPP 8.2+ depuis apachefriends.org et installez-le.
  2. Copiez le projet AssetHub dans C:\xampp\htdocs\AssetHub\ (Windows) ou /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Ouvrez le XAMPP Control Panel et démarrez Apache et MySQL. Si les ports sont occupés, utilisez Config → service.conf pour basculer Apache sur 8080.
  4. Allez sur http://localhost/phpmyadminNouvelle → créez une base nommée assethub avec interclassement utf8mb4.
  5. Dans le dossier du projet : copiez .env.example vers .env, mettez DB_DATABASE=assethub, DB_USERNAME=root, laissez DB_PASSWORD vide (défaut XAMPP). Exécutez php artisan key:generate.
  6. Visitez http://localhost/AssetHub/public/install pour lancer l'assistant d'installation.
URLs propres sans /public/ : créez un hôte virtuel dans C:\xampp\apache\conf\extra\httpd-vhosts.conf pointant DocumentRoot vers le dossier public/ du projet, puis ajoutez 127.0.0.1 assethub.local à votre fichier hosts.

Option 3 — Laragon (Windows)

Laragon est un stack Windows portable conçu pour Laravel — vhosts automatiques, URLs propres, MySQL/MariaDB et HeidiSQL inclus.

  1. Téléchargez Laragon Full depuis laragon.org et installez-le.
  2. Dans Laragon : Menu → PHP → Version — basculez sur PHP 8.2 ou 8.3.
  3. Copiez le projet AssetHub dans C:\laragon\www\AssetHub\.
  4. Cliquez sur Start All. Laragon crée automatiquement le vhost : http://assethub.test (pointant vers le dossier public/).
  5. Ouvrez HeidiSQL (inclus) → créez la base assethub. Identifiants par défaut : utilisateur root, mot de passe vide.
  6. Éditez .env avec les identifiants BD, exécutez php artisan key:generate, puis visitez http://assethub.test/install.

Option 4 — Serveur PHP intégré (sans serveur web)

L'option la plus simple : Laravel embarque artisan serve, qui démarre un serveur PHP de développement. Pas besoin d'Apache ou Nginx. Idéal pour des tests rapides.

# Installer les dépendances et configurer
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Lancer les migrations et le seed des données initiales
php artisan migrate --seed

# Démarrer le serveur de développement
php artisan serve
# Puis visitez: http://127.0.0.1:8000/install

Pièges courants en localhost

Le scanner QR n'ouvre pas la caméra sur http://

Les APIs caméra du navigateur exigent HTTPS, avec une exception : http://localhost et http://127.0.0.1 sont traités comme des contextes sécurisés. Si vous accédez à AssetHub via votre IP LAN (p. ex. http://192.168.1.10), la caméra refusera. Utilisez localhost pour le dev, ou activez HTTPS via Herd / mkcert.

Permission denied sur storage (macOS / Linux)

Si vous voyez des erreurs d'écriture quand l'app essaie de logger ou de cacher, corrigez les permissions : chmod -R 775 storage bootstrap/cache. Sur Windows ce n'est généralement pas nécessaire.

Port déjà utilisé

Si le port 8000 est pris par une autre app, utilisez un port différent :

php artisan serve --port=8001

Tester les emails localement

Le vrai SMTP n'est pas disponible sur la plupart des configurations localhost. Deux options sûres : (1) mettez MAIL_MAILER=log dans .env — les emails sont écrits dans storage/logs/laravel.log au lieu d'être envoyés ; ou (2) utilisez Mailtrap / MailHog pour capturer le courrier sortant dans une fausse boîte de réception.

MAIL_MAILER=log
# Tous les emails sont écrits dans storage/logs/laravel.log

Assets frontend (Vite / Tailwind)

Le frontend Vue/Tailwind d'AssetHub est pré-compilé dans le paquet. Si vous éditez des composants Vue ou la config Tailwind, vous aurez besoin de Node.js 18+ :

npm install
npm run dev    # Hot-reload pendant le développement
npm run build  # Build de production (à exécuter avant le déploiement)

Déployer sur Hostinger Single (Hébergement mutualisé)

C'est la voie recommandée pour les utilisateurs sans VPS ni expérience technique. AssetHub est entièrement compatible avec l'offre Hostinger Single Web Hosting la moins chère (~$2.99/mois). Pas de SSH, pas de Composer, pas de ligne de commande — Single inclut des cron jobs natifs, PHP 8.3 et SSL gratuit.

Testé sur : offres Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, Cron Jobs natifs inclus sur toutes).

Étape 1 — Préparer votre hébergement

  1. Connectez-vous à Hostinger hPanel.
  2. Allez dans Hébergement → Gérer pour votre domaine.
  3. Définissez la version PHP à 8.2 ou 8.3 via Avancé → Configuration PHP.
  4. Assurez-vous que ces extensions PHP sont activées (généralement par défaut) :
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Étape 2 — Créer la base de données MySQL

  1. Dans hPanel, allez dans Bases de données → MySQL Databases.
  2. Cliquez sur Créer une nouvelle base de données.
  3. Notez ces 3 valeurs :
    • Nom de la base de données — p. ex. u123_AssetHub
    • Utilisateur — p. ex. u123_admin
    • Mot de passe — auto-généré, gardez-le précieusement

Étape 3 — Téléverser les fichiers

  1. Allez dans Fichiers → File Manager dans hPanel.
  2. Naviguez vers public_html/ (c'est la racine de votre domaine).
  3. Supprimez tout index.html ou default.php par défaut dans ce dossier.
  4. Cliquez sur Téléverser des fichiers et téléversez tout source.zip du paquet.
    Ou téléversez directement le contenu du dossier /source/ via FTP si vous préférez.
  5. Si vous avez téléversé un ZIP, clic droit → Extraire. Après extraction, tous les fichiers doivent être à la racine de public_html/.
  6. Vérifiez que public_html/ contient : app/, public/, vendor/, .htaccess, index.php (dans public/), .env, etc.
Important : Assurez-vous que le fichier .htaccess existe à la racine de public_html/. Il contient les règles de réécriture d'URL. Si File Manager cache les fichiers cachés, cliquez sur Paramètres → Afficher les fichiers cachés.

Étape 4 — Lancer l'installeur

  1. Ouvrez votre navigateur et allez à https://yourdomain.com/install.
  2. Vous verrez AssetHub Installer.
  3. Étape 1 : Requirements — Toutes les vérifications doivent passer (vert). Si une échoue, contactez le support Hostinger pour activer l'extension PHP manquante.
  4. Étape 2 : Database — Entrez les identifiants de l'Étape 2 ci-dessus :
    • Hôte: localhost
    • Port: 3306
    • Base de données: u123_AssetHub
    • Utilisateur: u123_admin
    • Mot de passe : (celui généré par Hostinger)
  5. Étape 3 : Migrate — Cliquez sur "Run Migrations & Seed". Prend ~10 secondes. Ne pas rafraîchir.
  6. Étape 4 : Admin — Créez votre compte administrateur. Utilisez un mot de passe fort.
  7. Terminé ! — Vous verrez l'URL Cron (sauvegardez-la !) et un bouton de connexion.

Étape 5 — Configurer les alertes e-mail automatiques via Hostinger Cron

AssetHub utilise le planificateur Laravel pour les tâches en arrière-plan : alertes de garantie, rappels de maintenance, expiration de documents, rafraîchissement de l'amortissement et checkouts en retard. Configurez un seul cron job dans hPanel et Laravel décide quelle tâche exécuter et quand.

  1. Dans hPanel, allez dans Avancé → Cron Jobs.
  2. Cliquez sur Créer un Cron job.
  3. Sélectionnez le type : Custom (pas "PHP" — nous devons passer un argument).
  4. Pour la commande, entrez (remplacez uXXXXXX par votre nom d'utilisateur Hostinger) :
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Astuce : ouvrez File Manager, repérez le fichier artisan (racine du projet), clic droit → Propriétés pour copier le chemin complet.
  5. Définissez le planning à Chaque minute — les cinq champs (Minute, Heure, Jour, Mois, Jour de la semaine) à *.
  6. Cliquez sur Enregistrer.

C'est tout — AssetHub envoie maintenant automatiquement les rappels de checkout en retard, alertes de maintenance, expiration de documents, garanties, et rafraîchit les valeurs d'amortissement. Laravel planifie en interne chaque job à sa bonne fréquence (quotidien 08:00, mensuel, etc.).

Document root configuré sur public_html/public/ ? Aucun problème — votre code Laravel reste à la racine de public_html/, le chemin du cron reste donc /home/uXXXX/public_html/artisan (n'ajoutez pas /public/).
Solution de secours pour hébergeurs sans cron : Si vous n'êtes pas sur Hostinger ou que votre hébergeur n'a pas de cron jobs, AssetHub expose aussi une URL de déclenchement webhook.
  1. Connectez-vous comme admin → Paramètres → onglet Système → copiez votre URL Cron.
  2. Inscrivez-vous gratuitement sur cron-job.org.
  3. Créez un cronjob, collez l'URL, réglez sur Toutes les 15 minutes, enregistrez.

Étape 6 — Configurer l'e-mail (SMTP)

Hostinger fournit des comptes e-mail avec chaque offre. Pour les utiliser pour les notifications AssetHub :

  1. Dans hPanel, allez dans E-mails → Comptes e-mail et créez-en un (p. ex. noreply@yourdomain.com).
  2. Éditez le fichier .env dans public_html/ via File Manager :
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.hostinger.com
    MAIL_PORT=587
    MAIL_USERNAME=noreply@yourdomain.com
    MAIL_PASSWORD=your_email_password
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=noreply@yourdomain.com
    MAIL_FROM_NAME="Your Company Name"
  3. Enregistrez le fichier.
  4. Connectez-vous à AssetHub → Paramètres → onglet Email → Envoyer un e-mail test. Si vous le recevez, c'est bon.
Limites SMTP sur Single : Hostinger Single autorise ~100 e-mails sortants par heure. Pour les déploiements plus grands, utilisez un fournisseur dédié comme SendGrid, Mailgun ou Postmark (offres gratuites disponibles).

Problèmes courants sur Hostinger Single

"500 Internal Server Error" après téléversement

  • Vérifiez que .htaccess existe à la racine de public_html/ et contient les règles de réécriture.
  • Vérifiez que la version PHP est sur 8.2 ou 8.3 dans hPanel.
  • Consultez storage/logs/laravel.log via File Manager pour l'erreur réelle.

"Permission denied" sur les uploads

Hostinger définit généralement les bonnes permissions, mais sinon :

  • Clic droit sur storage/ dans File Manager → Permissions → réglez à 755 récursivement.
  • Idem pour bootstrap/cache/.

Le scanner QR n'ouvre pas la caméra

Les APIs caméra du navigateur exigent HTTPS. Hostinger fournit du SSL gratuit via Let's Encrypt — activez-le dans hPanel sous SSL → Gérer.

Les e-mails planifiés ne partent pas

  • Dans hPanel → Cron Jobs → vérifiez la colonne Last run de votre cron. Si elle est vide, le cron ne se déclenche pas — vérifiez le chemin artisan.
  • Testez la commande manuellement : ouvrez Terminal dans hPanel (s'il est disponible) et exécutez la commande cron. En cas d'erreur, le message pointera le problème (mauvaise version PHP, mauvais chemin, etc.).
  • Vérifiez que SMTP est correctement configuré (Paramètres → Email → Envoyer test).
  • Consultez storage/logs/laravel.log pour les erreurs du planificateur.

Performance lente

Hostinger Single a un CPU/RAM partagés. Si votre équipe dépasse 20 utilisateurs, envisagez :

  • De passer à Premium (~$3.99/mois) — serveurs plus rapides, plus de ressources, plusieurs bases de données.
  • Ou Business (~$5.99/mois) — ressources dédiées, sauvegardes quotidiennes, environnement staging.

Configuration

Fichier .env

CléDescriptionExemple
APP_NAMENom de l'application affiché dans la barre de titreAssetHub
APP_URLURL publique de votre installationhttps://assets.example.com
APP_DEBUGDéfinir à false en productionfalse
DB_*Détails de connexion à la base de donnéesmysql, 127.0.0.1, 3306, ...
MAIL_MAILERPilote mailsmtp, log, mailgun
MAIL_HOSTNom d'hôte du serveur SMTPsmtp.gmail.com
MAIL_PORTPort SMTP587
MAIL_USERNAMEIdentifiant SMTPyour@email.com
MAIL_PASSWORDMot de passe SMTP ou app token**********
MAIL_FROM_ADDRESSAdresse From par défautnoreply@example.com

Paramètres in-app

La plupart des options non sensibles sont configurables depuis Admin → Paramètres :

  • Général : nom/e-mail/téléphone de l'entreprise, préfixe asset tag
  • Email : envoyer un e-mail test pour vérifier SMTP
  • Notifications : seuils d'alerte garantie, fenêtre de rappel maintenance
  • Localisation : fuseau horaire, format de date, devise

Support multilingue

AssetHub est livré avec 10 langues prêtes à l'emploi, y compris l'arabe RTL. Les utilisateurs changent de langue via le menu déroulant de drapeau en haut à droite.

Langues incluses

CodeLangueDirection
enEnglish (default)LTR
viTiếng ViệtLTR
esEspañolLTR
frFrançaisLTR
deDeutschLTR
zh简体中文LTR
ja日本語LTR
pt-BRPortuguês (Brasil)LTR
ruРусскийLTR
arالعربيةRTL

Comment changer de langue

  1. Cliquez sur l'icône drapeau (en haut à droite) pour ouvrir le menu.
  2. Choisissez votre langue dans la liste.
  3. La page se recharge ; toutes les étiquettes, dates et formats de devise changent.
  4. Votre choix est enregistré dans votre compte utilisateur et dans un cookie (1 an).
N'ouvrez pas les fichiers .html de l'app directement. AssetHub est une application Laravel + Vue côté serveur — le changement de langue envoie un POST à /locale/{code}, ce qui ne fonctionne que lorsqu'un serveur PHP est en cours d'exécution. Accédez toujours par votre vrai domaine (production) ou http://localhost:8000 (dev avec php artisan serve). Les fichiers de documentation comme celui-ci, en revanche, sont entièrement autonomes et peuvent être ouverts directement.

Ajouter une langue personnalisée (admin)

Admin → Paramètres → Traductions :

  • Cliquez sur "Ajouter Locale" — fournissez code (ex. th pour thaï), nom affiché, nom natif, drapeau, direction, et une locale de base pour copier les traductions.
  • Modifiez les traductions directement dans l'Éditeur de Traductions, ou via import/export CSV.
  • Les traductions stockées en BD remplacent automatiquement celles des fichiers.

Locale par défaut par utilisateur

Chaque utilisateur a une colonne locale. Les notifications par email sont automatiquement envoyées dans la langue préférée du destinataire grâce au contrat HasLocalePreference de Laravel.

Liste des fonctionnalités

Gestion des actifs

  • Asset tags auto-générés
  • Plusieurs images par actif
  • Génération de codes QR
  • Suivi du statut et de l'état
  • Import/export en masse
  • Cloner un actif

Flux de travail

  • Affecter / Retourner / Transférer
  • Demandes avec approbation
  • Réservation Check-in / Check-out
  • Détection de conflits

Maintenance

  • Planifier préventif/correctif
  • Vue calendrier
  • Auto-planifier le suivant
  • Suivi des coûts
  • Rappels par e-mail

Documents

  • Joindre factures, manuels
  • Aperçu inline
  • Alertes d'expiration
  • Plusieurs types de documents

Amortissement

  • 3 méthodes de calcul
  • Mise à jour automatique de la valeur
  • Graphique d'échéancier
  • Résumé annuel

Rapports

  • 8 types de rapport
  • Export Excel + PDF
  • Graphiques et tableaux de bord
  • Filtres de date

Utilisateurs et Rôles

AssetHub est livré avec 5 rôles préconfigurés :

RôleCapacités
AdminAccès complet — utilisateurs, départements, paramètres, audit, webhooks, traductions
IT ManagerGérer actifs, catégories, maintenance, demandes ; approuver transferts ; voir rapports et amortissement
ComptableGérer actifs et amortissement, mener inventaires, approuver transferts, accès complet aux rapports (focus financier)
SuperviseurApprouver les demandes du département, gérer les checkouts, participer aux inventaires, voir les rapports
EmployéVoir les actifs affectés, créer des demandes, gérer ses propres checkouts

Les permissions sont stockées comme rôles Spatie — les administrateurs peuvent affiner par permission via la base de données.

Gestion des actifs

Créer des actifs

  1. Naviguez vers Actifs → Nouvel actif.
  2. Renseignez nom, catégorie, marque, modèle, numéro de série.
  3. Ajoutez date d'achat et prix (requis pour l'amortissement).
  4. Téléversez les images (plusieurs fichiers supportés, max 5 Mo chacun).
  5. Enregistrez — asset tag et code QR sont auto-générés.

Format de l'Asset Tag

Par défaut : {PREFIX}-{YEAR}-{NNNN}, p. ex. AS-2026-0001. Configurable via Paramètres → Général → Préfixe Asset Tag.

Import en masse

  1. Cliquez sur Importer sur la page Actifs.
  2. Téléchargez le modèle Excel.
  3. Remplissez vos données — colonnes requises : name, category_name.
  4. Téléversez le fichier.

Codes QR

Chaque actif reçoit automatiquement un code QR à sa création. Le QR encode l'URL de l'actif, donc le scan amène directement à la page de détail.

Imprimer les étiquettes

  • Étiquette unique : cliquez sur l'icône imprimante sur n'importe quelle ligne d'actif.
  • Format PDF : A4, 2 étiquettes par ligne, comprend asset tag, nom, marque, série.

Scan

Cliquez sur Scanner QR sur la page Actifs. Autorisez l'accès à la caméra. Le scanner utilise html5-qrcode et fonctionne sur tout navigateur moderne. Note : l'accès caméra nécessite HTTPS ou localhost.

Flux de travail

Affectation d'actif

  1. Ouvrez une page de détail d'actif.
  2. Cliquez sur Affecter (visible si l'actif est disponible).
  3. Choisissez un utilisateur, date de retour optionnelle, notes.
  4. Soumettez — la transaction est créée et la notification e-mail envoyée.

Demandes d'actifs

Les employés peuvent soumettre des demandes d'actifs. Les demandes ont 4 statuts : pending → approved → fulfilled, ou rejected. Les e-mails d'approbation sont envoyés automatiquement.

Check-in / Check-out

Pour les actifs partagés (caméras, projecteurs, véhicules). Les réservations ont des plages de dates ; le système empêche les checkouts qui se chevauchent. La vue calendrier montre toutes les réservations d'un coup d'œil.

Amortissement

AssetHub calcule l'amortissement des actifs avec l'une des trois méthodes :

MéthodeFormuleCas d'usage
Linéaire(Cost - Salvage) / Useful LifePlus courant ; amortissement annuel constant
Dégressif2 / Useful Life × Book ValueAccéléré ; pour fiscalité
Unités de productionBasé sur l'usageÉquipement industriel

Les valeurs par défaut sont héritées de la catégorie de l'actif. Les entrées d'échéancier sont générées mensuellement. La current_value de l'actif est mise à jour automatiquement le 1er de chaque mois.

Champs personnalisés

Admin → Champs personnalisés vous permet d'ajouter des attributs personnalisés illimités aux actifs :

  • Types : texte, nombre, date, sélection (dropdown), zone de texte, fichier, case à cocher
  • Portée : appliquer à toutes les catégories ou à une catégorie spécifique
  • Réordonner : glisser-déposer la poignée
  • Les champs obligatoires sont validés à l'enregistrement de l'actif

Rapports

Huit rapports intégrés, accessibles depuis le menu Rapports :

  1. Résumé des actifs — totaux par statut, état, catégorie, département
  2. Amortissement — perte de valeur par catégorie, actifs les plus amortis
  3. Transactions — activité d'affectation, retour, transfert dans le temps
  4. Coût de maintenance — dépenses par mois, catégorie, type
  5. Expiration de garantie — actifs nécessitant attention dans 30/60/180 jours
  6. Actifs par département — distribution et utilisation du budget par département
  7. Actifs par source — distribution entre achats, projet, don, transfert
  8. Résumé d'audit d'inventaire — écarts entre cycles d'audit périodiques

Tous les rapports supportent l'export Excel et PDF via les boutons en en-tête.

Webhooks

AssetHub peut notifier des services externes lors d'événements clés.

Événements disponibles

  • asset.created, asset.updated, asset.deleted
  • asset.assigned, asset.returned, asset.transferred
  • request.created, request.approved, request.rejected, request.fulfilled
  • maintenance.scheduled, maintenance.started, maintenance.completed
  • checkout.created, checkout.returned

Format du Payload

{
  "event": "asset.assigned",
  "timestamp": "2026-05-05T08:00:00+00:00",
  "data": {
    "asset_id": 1,
    "asset_tag": "AS-2026-0001",
    "asset_name": "HP EliteDesk 800",
    "to_user_id": 4,
    "transaction_id": 12
  }
}

Vérification de signature

Si un secret est configuré, les requêtes incluent l'en-tête X-AssetHub-Signature contenant HMAC-SHA256 du corps. Vérifiez de votre côté :

$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
  // valide
}

Politique de retry

Les livraisons échouées sont retentées 3 fois avec un délai de 200 ms. Après 10 échecs consécutifs, le webhook est auto-désactivé.

Tâches planifiées

AssetHub utilise le planificateur Laravel pour les jobs en arrière-plan. Vous n'avez besoin que d'une seule entrée cron — Laravel dispatche en interne chaque job au bon moment.

Hostinger / Hébergement mutualisé (UI Cron Jobs hPanel)

Voir la section Configuration Hostinger → Étape 5 pour instructions style captures d'écran. En bref : Avancé → Cron Jobs → Custom, commande :

/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run

Planning : chaque minute (* dans les cinq champs).

VPS / serveur dédié (crontab)

Exécutez crontab -e en tant qu'utilisateur web (souvent www-data) et ajoutez :

* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1

Solution de secours : pinger d'URL externe

Si votre hébergeur n'a pas de cron du tout, utilisez l'URL Cron in-app (Paramètres → onglet Système) avec cron-job.org (gratuit, toutes les 15 min).

Jobs qui s'exécutent automatiquement

HeureCommandeObjectif
Quotidien 08:00send-overdue-checkout-alertsRappels e-mail des checkouts en retard
Quotidien 08:30send-maintenance-remindersRappels de maintenance à venir
Quotidien 09:00send-document-expiry-alertsDocuments expirant dans 30/14/7/1 jours
Quotidien 09:30send-warranty-alertsAlertes d'expiration garantie + assurance
Quotidien 10:00assethub:send-depreciation-end-alertsAlertes quand les actifs atteignent la fin de leur durée de vie
Quotidien 10:30send-inventory-audit-remindersRappels pour audits d'inventaire actifs
Mensuel le 1er, 02:00update-asset-valuesRafraîchir current_value des actifs depuis l'amortissement

Dépannage

"Permission denied" sur storage

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

Le scanner QR n'ouvre pas la caméra

Les APIs caméra du navigateur exigent HTTPS. Installez un certificat SSL ou utilisez localhost pour tester.

Les e-mails n'arrivent pas

Consultez storage/logs/laravel.log pour les erreurs. Utilisez Paramètres → Email → Envoyer un e-mail test pour vérifier les identifiants SMTP. Assurez-vous que votre serveur SMTP autorise l'IP émettrice.

Réinitialiser l'installation

Supprimez storage/installed.lock et revisitez /install. Les données existantes seront effacées si vous relancez les migrations.

Performance — liste d'actifs lente

Exécutez php artisan optimize pour cacher config, routes, vues. Assurez-vous que MySQL a des index sur assets.asset_tag, assets.serial_number, assets.status (créés automatiquement par les migrations).

Journal des modifications

v1.0.0 — Version initiale (2026-05)

  • CRUD d'actifs avec génération automatique de QR
  • 5 rôles utilisateur (Admin, IT Manager, Comptable, Superviseur, Employé) avec permissions granulaires
  • Suivi de Source d'actif (achat centralisé, achat décentralisé, projet d'investissement, don, transfert interne)
  • Flux d'affectation, retour avec notifications e-mail
  • Flux d'approbation de transfert (pending → approved/rejected) avec contrôle de permissions
  • Flux d'approbation des demandes d'actifs
  • Check-in/check-out avec vue calendrier
  • Planification de maintenance avec auto-renouvellement
  • Pièces jointes de documents avec alertes d'expiration
  • Amortissement avec 3 méthodes + alertes de fin de vie
  • Module d'audit d'inventaire — inventaire périodique avec suivi des écarts
  • Champs personnalisés avec 7 types d'entrée et tri drag-drop
  • 8 rapports avec graphiques, export Excel et PDF (incl. Actifs par source, Résumé d'audit)
  • Journal d'audit via Spatie Activitylog avec visualiseur de diff
  • Webhooks avec signature HMAC et auto-retry
  • Interface multi-langue : 10 langues (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar avec RTL)
  • UI de Paramètres pour entreprise, e-mail, notifications, localisation, traductions
  • Assistant d'installation web
  • Mode sombre avec palette emerald-teal

Crédits

Bibliothèques open-source utilisées