Démarrage
Installez AssetHub sur Hostinger ou votre propre VPS en moins de 10 minutes.
Utilisateurs et Rôles
5 rôles préconfigurés avec permissions Spatie, ajustables par utilisateur.
Fonctionnalités du produit
Actifs, flux de travail, maintenance, amortissement, journal d'audit et plus.
Personnalisation
Ajoutez des champs illimités, modifiez le branding, les langues et thèmes.
Configuration Hostinger
Déploiement pas à pas sur l'offre Single mutualisée la moins chère.
Sécurité et QR
HTTPS, webhooks signés HMAC, journal d'audit et scanner QR via caméra.
Rapports et Export
8 rapports intégrés avec export Excel + PDF et filtres par date.
Alertes e-mail
Rappels de garantie, maintenance, expiration de documents et checkouts en retard.
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é)
- Téléversez les fichiers du projet sur votre serveur web.
- Pointez le document root du domaine vers
public/. - Définissez les permissions :
storage/etbootstrap/cache/doivent être inscriptibles (chmod 775). - Copiez
.env.examplevers.envet exécutezphp artisan key:generate. - Visitez
https://yourdomain.com/installdans votre navigateur. - 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
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).
| Field | Default / Example | Notes |
|---|---|---|
| Host | 127.0.0.1 | Works 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). |
| Port | 3306 | Standard MySQL port. Only change if your provider uses a non-standard port (rare). |
| Database name | uXXXXXX_assethub | The full name shown in your hosting panel. Most shared hosts prefix it with your user ID (e.g. Hostinger: u287094729_assethub). |
| Username | uXXXXXX_assethub | MySQL 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
3306but 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 message | Cause and fix |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Wrong 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 database | The 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 refused | The 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: sessions | Happens 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 driver | PHP 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. |
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.
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.
- Téléchargez et installez Laravel Herd depuis herd.laravel.com.
- 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. - 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).
- 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). - Copiez
.env.examplevers.env, remplissez les identifiants BD, puis exécutezphp artisan key:generateà la racine du projet. - Ouvrez
http://assethub.test/installdans 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.
- Téléchargez XAMPP 8.2+ depuis apachefriends.org et installez-le.
- Copiez le projet AssetHub dans
C:\xampp\htdocs\AssetHub\(Windows) ou/Applications/XAMPP/htdocs/AssetHub/(macOS). - 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.
- Allez sur
http://localhost/phpmyadmin→ Nouvelle → créez une base nomméeassethubavec interclassement utf8mb4. - Dans le dossier du projet : copiez
.env.examplevers.env, mettezDB_DATABASE=assethub,DB_USERNAME=root, laissezDB_PASSWORDvide (défaut XAMPP). Exécutezphp artisan key:generate. - Visitez
http://localhost/AssetHub/public/installpour lancer l'assistant d'installation.
/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.
- Téléchargez Laragon Full depuis laragon.org et installez-le.
- Dans Laragon : Menu → PHP → Version — basculez sur PHP 8.2 ou 8.3.
- Copiez le projet AssetHub dans
C:\laragon\www\AssetHub\. - Cliquez sur Start All. Laragon crée automatiquement le vhost :
http://assethub.test(pointant vers le dossierpublic/). - Ouvrez HeidiSQL (inclus) → créez la base
assethub. Identifiants par défaut : utilisateurroot, mot de passe vide. - Éditez
.envavec les identifiants BD, exécutezphp artisan key:generate, puis visitezhttp://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.
Étape 1 — Préparer votre hébergement
- Connectez-vous à Hostinger hPanel.
- Allez dans Hébergement → Gérer pour votre domaine.
- Définissez la version PHP à 8.2 ou 8.3 via Avancé → Configuration PHP.
- 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
- Dans hPanel, allez dans Bases de données → MySQL Databases.
- Cliquez sur Créer une nouvelle base de données.
- Notez ces 3 valeurs :
Nom de la base de données— p. ex.u123_AssetHubUtilisateur— p. ex.u123_adminMot de passe— auto-généré, gardez-le précieusement
Étape 3 — Téléverser les fichiers
- Allez dans Fichiers → File Manager dans hPanel.
- Naviguez vers
public_html/(c'est la racine de votre domaine). - Supprimez tout
index.htmloudefault.phppar défaut dans ce dossier. - Cliquez sur Téléverser des fichiers et téléversez tout
source.zipdu paquet.
Ou téléversez directement le contenu du dossier/source/via FTP si vous préférez. - Si vous avez téléversé un ZIP, clic droit → Extraire. Après extraction, tous les fichiers doivent être à la racine de
public_html/. - Vérifiez que
public_html/contient :app/,public/,vendor/,.htaccess,index.php(danspublic/),.env, etc.
.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
- Ouvrez votre navigateur et allez à
https://yourdomain.com/install. - Vous verrez AssetHub Installer.
- Étape 1 : Requirements — Toutes les vérifications doivent passer (vert). Si une échoue, contactez le support Hostinger pour activer l'extension PHP manquante.
- É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)
- Hôte:
- Étape 3 : Migrate — Cliquez sur "Run Migrations & Seed". Prend ~10 secondes. Ne pas rafraîchir.
- Étape 4 : Admin — Créez votre compte administrateur. Utilisez un mot de passe fort.
- 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.
- Dans hPanel, allez dans Avancé → Cron Jobs.
- Cliquez sur Créer un Cron job.
- Sélectionnez le type : Custom (pas "PHP" — nous devons passer un argument).
- Pour la commande, entrez (remplacez
uXXXXXXpar votre nom d'utilisateur Hostinger) :
Astuce : ouvrez File Manager, repérez le fichier/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(racine du projet), clic droit → Propriétés pour copier le chemin complet. - Définissez le planning à Chaque minute — les cinq champs (Minute, Heure, Jour, Mois, Jour de la semaine) à
*. - 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.).
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/).
- Connectez-vous comme admin → Paramètres → onglet Système → copiez votre URL Cron.
- Inscrivez-vous gratuitement sur cron-job.org.
- 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 :
- Dans hPanel, allez dans E-mails → Comptes e-mail et créez-en un (p. ex.
noreply@yourdomain.com). - Éditez le fichier
.envdanspublic_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" - Enregistrez le fichier.
- Connectez-vous à AssetHub → Paramètres → onglet Email → Envoyer un e-mail test. Si vous le recevez, c'est bon.
Problèmes courants sur Hostinger Single
"500 Internal Server Error" après téléversement
- Vérifiez que
.htaccessexiste à la racine depublic_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.logvia 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 à755ré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.logpour 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é | Description | Exemple |
|---|---|---|
APP_NAME | Nom de l'application affiché dans la barre de titre | AssetHub |
APP_URL | URL publique de votre installation | https://assets.example.com |
APP_DEBUG | Définir à false en production | false |
DB_* | Détails de connexion à la base de données | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Pilote mail | smtp, log, mailgun |
MAIL_HOST | Nom d'hôte du serveur SMTP | smtp.gmail.com |
MAIL_PORT | Port SMTP | 587 |
MAIL_USERNAME | Identifiant SMTP | your@email.com |
MAIL_PASSWORD | Mot de passe SMTP ou app token | ********** |
MAIL_FROM_ADDRESS | Adresse From par défaut | noreply@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
| Code | Langue | Direction |
|---|---|---|
en | English (default) | LTR |
vi | Tiếng Việt | LTR |
es | Español | LTR |
fr | Français | LTR |
de | Deutsch | LTR |
zh | 简体中文 | LTR |
ja | 日本語 | LTR |
pt-BR | Português (Brasil) | LTR |
ru | Русский | LTR |
ar | العربية | RTL |
Comment changer de langue
- Cliquez sur l'icône drapeau (en haut à droite) pour ouvrir le menu.
- Choisissez votre langue dans la liste.
- La page se recharge ; toutes les étiquettes, dates et formats de devise changent.
- Votre choix est enregistré dans votre compte utilisateur et dans un cookie (1 an).
/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.
thpour 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ôle | Capacités |
|---|---|
| Admin | Accès complet — utilisateurs, départements, paramètres, audit, webhooks, traductions |
| IT Manager | Gérer actifs, catégories, maintenance, demandes ; approuver transferts ; voir rapports et amortissement |
| Comptable | Gérer actifs et amortissement, mener inventaires, approuver transferts, accès complet aux rapports (focus financier) |
| Superviseur | Approuver 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
- Naviguez vers Actifs → Nouvel actif.
- Renseignez nom, catégorie, marque, modèle, numéro de série.
- Ajoutez date d'achat et prix (requis pour l'amortissement).
- Téléversez les images (plusieurs fichiers supportés, max 5 Mo chacun).
- 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
- Cliquez sur Importer sur la page Actifs.
- Téléchargez le modèle Excel.
- Remplissez vos données — colonnes requises :
name,category_name. - 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
- Ouvrez une page de détail d'actif.
- Cliquez sur Affecter (visible si l'actif est disponible).
- Choisissez un utilisateur, date de retour optionnelle, notes.
- 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éthode | Formule | Cas d'usage |
|---|---|---|
| Linéaire | (Cost - Salvage) / Useful Life | Plus courant ; amortissement annuel constant |
| Dégressif | 2 / Useful Life × Book Value | Accéléré ; pour fiscalité |
| Unités de production | Basé 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 :
- Résumé des actifs — totaux par statut, état, catégorie, département
- Amortissement — perte de valeur par catégorie, actifs les plus amortis
- Transactions — activité d'affectation, retour, transfert dans le temps
- Coût de maintenance — dépenses par mois, catégorie, type
- Expiration de garantie — actifs nécessitant attention dans 30/60/180 jours
- Actifs par département — distribution et utilisation du budget par département
- Actifs par source — distribution entre achats, projet, don, transfert
- 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.deletedasset.assigned,asset.returned,asset.transferredrequest.created,request.approved,request.rejected,request.fulfilledmaintenance.scheduled,maintenance.started,maintenance.completedcheckout.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
| Heure | Commande | Objectif |
|---|---|---|
| Quotidien 08:00 | send-overdue-checkout-alerts | Rappels e-mail des checkouts en retard |
| Quotidien 08:30 | send-maintenance-reminders | Rappels de maintenance à venir |
| Quotidien 09:00 | send-document-expiry-alerts | Documents expirant dans 30/14/7/1 jours |
| Quotidien 09:30 | send-warranty-alerts | Alertes d'expiration garantie + assurance |
| Quotidien 10:00 | assethub:send-depreciation-end-alerts | Alertes quand les actifs atteignent la fin de leur durée de vie |
| Quotidien 10:30 | send-inventory-audit-reminders | Rappels pour audits d'inventaire actifs |
| Mensuel le 1er, 02:00 | update-asset-values | Rafraî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
- Laravel 11 — MIT
- Vue 3 — MIT
- Inertia.js — MIT
- Tailwind CSS — MIT
- Spatie Permission, Media Library, Activitylog — MIT
- Phosphor Icons — MIT (duotone weight)
- ApexCharts — MIT
- html5-qrcode — Apache 2.0
- Simple QrCode — MIT
- Laravel Excel — MIT
- Laravel DomPDF — MIT