Démarrage
Installez AssetHub sur cPanel, 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.
Configuration cPanel
Déploiement pas à pas sur un hébergement mutualisé cPanel standard — aucun Terminal requis.
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 de Laravel. Vous ne configurez qu'un seul cron job qui s'exécute chaque minute, et Laravel distribue en interne chaque tâche au bon moment (quotidien 08:00, mensuel, etc.). Pour cPanel, configurez-le dans Advanced → Cron Jobs. Pour Hostinger, utilisez hPanel → Advanced → Cron Jobs. Voir Configuration cPanel → Étape 7 ou Configuration Hostinger → Étape 5. 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 tous les navigateurs modernes (téléphone/tablette/bureau). Le seul prérequis est HTTPS. AutoSSL cPanel et Let's Encrypt SSL Hostinger fonctionnent 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 ?
11 locales prêtes à l'emploi : anglais, vietnamien, espagnol, français, allemand, chinois, japonais, portugais (BR), russe, arabe (avec prise en charge RTL complète) et hindi (हिन्दी). Les admins gèrent les traductions depuis Administration → Translations (nécessite la permission manage translations).
Puis-je installer AssetHub sur un hébergement mutualisé cPanel ?
Oui — AssetHub fonctionne sur tout plan d'hébergement mutualisé cPanel standard avec PHP 8.2+, MySQL et Cron Jobs. Aucun Composer ni Node.js sur le serveur requis — le package est livré pré-compilé. De nombreux hébergeurs cPanel n'incluent pas de Terminal web ; ce n'est pas un problème. Voir la section Configuration cPanel pour le guide complet pas à pas (y compris comment générer APP_KEY sans Terminal).
Comment rebrand AssetHub (page de connexion, titre d'onglet et couleurs) ?
AssetHub peut être entièrement rebrandé depuis le panneau admin — sans modification de code ni npm run build. Depuis v3.1.0, le logo, le footer et le badge de la page de connexion suivent Settings → Branding → App Name. v4.0 ajoute le titre d'onglet du navigateur en temps réel et l'onglet Appearance pour les couleurs globales en mode clair et sombre.
auth.login_subtitle par langue → personnalisez les couleurs dans Settings → Appearance.
Référence rapide:
| Élément | Exemple | Comment modifier |
|---|---|---|
| Top-left logo & wordmark | VimoticFAR | Settings → Branding → App Name |
| Login subtitle | Enter your credentials to access AssetHub | Administration → Translations → auth.login_subtitle |
| Footer copyright | © 2026 VimoticFAR | Settings → Branding → App Name |
| Right panel badge | VIMOTICFAR | Settings → Branding → App Name |
| Browser page title (tab) | YourAppName | Settings → Branding → App Name (v4.0+) |
| App colors (buttons, sidebar, badges…) | Custom green / blue palette | Settings → Appearance (v4.0+) |
1. Logo and wordmark:
- Sign in as an administrator.
- Go to Settings → Branding.
- Update App Name (and optionally upload a logo).
- Save.
This name appears on the login page (logo, footer, badge), in the sidebar, and — since v4.0 — in the browser tab title on every page.
2. Browser page title (v4.0):
The text shown in the browser tab follows Settings → Branding → App Name at runtime. Change App Name, save, and refresh — no .env edit or rebuild needed. The title updates on the login screen and after sign-in.
3. Login subtitle: the line below the main heading uses the translation key auth.login_subtitle (not App Name).
- In the app (recommended): Administration → Translations → select language → group auth → key
login_subtitle→ replaceAssetHubwith your app name → Save. Repeat for each language. - In code: edit
lang/{locale}/auth.php— e.g.'login_subtitle' => 'Enter your credentials to access YourAppName',
4. Footer and right-panel badge: since v3.1.0, the footer (© {year} …) and the uppercase badge on the right column use the same App Name as the logo. Change it once under Settings → Branding and refresh the login page.
5. App colors — Appearance (v4.0):
The Appearance tab lets you change the color scheme for the entire application — buttons, sidebar highlights, badges, links, and themed text — separately for light and dark mode. Colors are saved to the database.
- Open: Sidebar → Settings → Appearance (requires manage settings permission).
- Color groups: Brand & Accent (primary UI), Success / Warning / Danger / Info (status badges), Primary / Secondary / Muted / Link (text).
- Light & dark: use the Editing: Light / Dark toggle — configure both if your team uses dark mode. Live Preview on the right.
- Save: click Save appearance to apply app-wide. Reset to defaults restores AssetHub's built-in palette (save afterward to persist).
Branding vs Appearance: Branding = app name, logo, page title. Appearance = colors only. For a complete visual rebrand, update both tabs.
Notes:
- Changing App Name does not update translation strings — edit
auth.login_subtitle(and otherauth.*keys) per language. - Translation overrides in Administration → Translations are stored in the database and survive app updates.
- The login page right column (headline, features) uses other
auth.*keys — edit them under the same auth group if needed. - If colors do not update after saving Appearance, hard-refresh (Ctrl+F5) and confirm you are editing the correct light/dark palette.
- After upgrading from an older package, upload the full current
source/files (including pre-builtpublic/build/) if branding features are missing.
Aperçu
AssetHub est un système complet de gestion des actifs construit avec Laravel 11, Vue 3 et Tailwind CSS. La version 3.0 ajoute un Translation Editor complet, des locales personnalisées, l'import/export CSV et une localisation effective du fuseau horaire/de la devise — en plus du suivi batch/lot v2, des allocations, des disposals et des pages publiques de remise QR.
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.
Hooks HTTP
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
12 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.
Mise en place
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 définissezAPP_KEY(exécutezphp artisan key:generatesi vous avez SSH/Terminal, ou voir Configuration cPanel → Étape 5 pour les alternatives du Gestionnaire de fichiers). - 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.
Assistant Étape 2 — Configuration de la base de données
Lorsque l'assistant atteint l'étape 2, vous devez saisir les informations de connexion MySQL de la base de données créée dans votre panneau d'hébergement. La base doit déjà exister (elle peut être vide — l'étape suivante de l'assistant créera les tables).
| Champ | Par défaut / Exemple | Remarques |
|---|---|---|
| Host | 127.0.0.1 | Fonctionne sur 99 % des hébergeurs mutualisés (Hostinger, cPanel, Plesk). Conservez cette valeur par défaut sauf si votre hébergeur fournit un nom d'hôte MySQL personnalisé (services de base gérée comme AWS RDS, DigitalOcean Managed Database). |
| Port | 3306 | Port MySQL standard. Ne modifiez que si votre fournisseur utilise un port non standard (rare). |
| Nom de la base de données | uXXXXXX_assethub | Le nom complet affiché dans votre panneau d'hébergement. La plupart des hébergeurs mutualisés le préfixent avec votre ID utilisateur (ex. Hostinger : u287094729_assethub). |
| Nom d'utilisateur | uXXXXXX_assethub | Utilisateur MySQL avec des droits sur la base de données ci-dessus. N'utilisez pas root — les hébergeurs mutualisés ne l'autorisent pas. |
| Mot de passe | (votre mot de passe DB) | Le mot de passe que vous avez défini ou copié lors de la création de l'utilisateur MySQL. La plupart des hébergeurs l'affichent une seule fois à la création — utilisez "View / Reset" si vous ne l'avez pas enregistré. |
Où trouver ces identifiants selon le panneau d'hébergement
- Hostinger: hPanel → Databases → Management → cliquez sur votre base de données. La page affiche le nom, l'utilisateur et un bouton "Show password".
- cPanel: cPanel → MySQL Databases. La liste des bases affiche les noms ; les utilisateurs sont listés en dessous. Utilisez "Change Password" si nécessaire.
- Plesk: Plesk → Databases → cliquez sur le nom de la base de données. La page de détail affiche les identifiants et propose une réinitialisation du mot de passe.
- DirectAdmin: DirectAdmin → MySQL Management → cliquez sur la base de données. Les identifiants et la réinitialisation du mot de passe se trouvent sur la page de détail.
- Base externe / gérée: AWS RDS, DigitalOcean Managed Database, etc. Utilisez le nom d'hôte personnalisé, le port (souvent
3306mais vérifiez), le nom de la base, l'utilisateur et le mot de passe depuis votre console cloud. Assurez-vous que l'IP du serveur est autorisée dans le pare-feu de la base.
Erreurs courantes et comment les corriger
| Message d'erreur | Cause et correction |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Nom d'utilisateur ou mot de passe incorrect, ou l'utilisateur n'a pas accès à cette base de données. Vérifiez l'orthographe (y compris le préfixe utilisateur sur l'hébergement mutualisé). Réinitialisez le mot de passe dans le panneau d'hébergement en cas de doute. |
SQLSTATE[HY000] [1049] Unknown database | Le nom de la base de données est incorrect, ou vous ne l'avez pas encore créée dans votre panneau d'hébergement. Créez-la d'abord, puis saisissez à nouveau le nom exact (y compris tout préfixe). |
SQLSTATE[HY000] [2002] Connection refused | Le serveur MySQL est inaccessible. Vérifiez Hôte et Port. Sur l'hébergement mutualisé, essayez localhost au lieu de 127.0.0.1 ou inversement. Pour les bases gérées, assurez-vous que l'IP du serveur est autorisée. |
SQLSTATE[42S02] Base table not found: sessions | Se produit lorsque SESSION_DRIVER=database ou CACHE_STORE=database est défini dans .env avant que les tables existent. Modifiez .env et changez les deux en file, enregistrez, puis rechargez l'assistant. Vous pourrez repasser à database après l'installation si vous le souhaitez. |
could not find driver | L'extension PHP pdo_mysql est manquante ou désactivée. Activez-la dans votre panneau d'hébergement (Configuration PHP → Extensions). Sur cPanel : MultiPHP INI Editor → Extensions ou Select PHP Version → Extensions. Sur Hostinger : hPanel → Advanced → PHP Configuration → onglet PHP Extensions. |
127.0.0.1 et 3306) — laissez-les tels quels sur l'hébergement mutualisé. Vous n'avez qu'à saisir le nom de la base de données, l'utilisateur et le mot de passe. Cliquez sur Test & Save → pour vérifier la connexion et passer à l'étape 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.
Choix 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.
Choix 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.
Déploiement sur cPanel (Hébergement mutualisé)
Ce guide couvre l'hébergement mutualisé cPanel standard (Namecheap, Bluehost, GoDaddy et la plupart des hébergeurs bon marché). AssetHub est livré avec vendor/ et les ressources frontend pré-compilées — aucun Composer, npm ni Terminal web requis. Si votre cPanel manque de Terminal, utilisez SSH Access ou les alternatives du Gestionnaire de fichiers ci-dessous.
/home/CPANELUSER/ — vérifiez la barre latérale dans cPanel sous Informations générales.
Étape 1 — Définir la version PHP et les extensions
- Connectez-vous à cPanel.
- Ouvrez MultiPHP Manager (ou Select PHP Version) et définissez votre domaine sur PHP 8.2 ou 8.3.
- Ouvrez MultiPHP INI Editor ou PHP Extensions et confirmez que ces extensions sont activées :
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
- Si une extension est manquante, activez-la dans la liste des extensions ou contactez le support de votre hébergeur.
Étape 2 — Activer SSL (HTTPS)
- Accédez à SSL/TLS Status (ou Let's Encrypt SSL / AutoSSL).
- Exécutez AutoSSL ou installez un certificat gratuit pour votre domaine.
- HTTPS est obligatoire pour que le scanner QR du navigateur accède à la caméra.
https://votredomaine.com pour confirmer l'apparition de l'icône de cadenas.
Étape 3 — Créer une base de données MySQL et un utilisateur
- Ouvrez Manage My Databases (sous Bases de données).
- Dans Créer une nouvelle base de données, saisissez un nom (ex.
assethub) et cliquez sur Créer. cPanel ajoute automatiquement le préfixe de votre compte — le nom complet ressemblera àcpaneluser_assethub. - Dans Utilisateurs MySQL, créez un utilisateur avec un mot de passe fort. Copiez le nom d'utilisateur complet avec son préfixe.
- Dans Ajouter un utilisateur à la base de données, sélectionnez l'utilisateur et la base de données, cliquez sur Ajouter, puis accordez TOUS LES PRIVILÈGES. Cette étape est facile à oublier — sans elle, vous obtiendrez des erreurs
Access denied (1045). - Notez ces trois valeurs exactement telles qu'elles apparaissent dans cPanel :
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 4 — Téléverser les fichiers
- Ouvrez le Gestionnaire de fichiers et accédez à
public_html/(racine du document de votre domaine). - Activez Paramètres → Afficher les fichiers cachés pour voir
.htaccesset.env. - Supprimez tout fichier
index.htmlpar défaut danspublic_html/s'il est présent. - Téléversez l'archive
source.zipet extrayez-la, ou téléversez le contenu du dossier/source/via FTP. - Après l'extraction,
public_html/doit contenirapp/,public/,vendor/, le.htaccessracine etartisanau même niveau.
.htaccess racine redirige toutes les requêtes vers le dossier public/ — vous n'avez pas besoin de modifier la racine du document manuellement sur la plupart des hébergeurs.
Étape 5 — Préparer .env avant d'exécuter l'installeur
Complétez cette étape avant de visiter /install. Laravel nécessite une APP_KEY valide et des paramètres de base de données corrects dans .env.
- Dans le Gestionnaire de fichiers, copiez
.env.examplevers.env(même dossier queartisan). - Éditez
.envet configurez au minimum :APP_NAME=AssetHub APP_ENV=production APP_DEBUG=false APP_URL=https://yourdomain.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=cpaneluser_assethub DB_USERNAME=cpaneluser_admin DB_PASSWORD="your_password" SESSION_DRIVER=file CACHE_STORE=file - Définissez
DB_CONNECTION=mysql— le fichier.env.examplepar défaut utilise SQLite ; l'hébergement mutualisé nécessite MySQL. - Définissez
SESSION_DRIVER=fileetCACHE_STORE=fileavant la première migration (évite les erreurs "table sessions introuvable"). - Entourez
DB_PASSWORDde guillemets doubles s'il contient des caractères spéciaux (#,$,!, etc.).
Générer APP_KEY (sans Terminal)
De nombreux plans cPanel n'incluent pas de Terminal web. Utilisez l'une de ces méthodes :
- SSH Access (cPanel → Sécurité → SSH Access) : connectez-vous avec PuTTY ou PowerShell, puis exécutez
cd ~/public_html && php artisan key:generate. - Assistant Gestionnaire de fichiers — créez temporairement
public/genkey.php, visitez-le dans votre navigateur, copiez le résultat dansAPP_KEY=, puis supprimez le fichier immédiatement.<?php echo 'base64:' . base64_encode(random_bytes(32)); - Sur votre PC — si PHP est installé localement, exécutez
php -r "echo 'base64:'.base64_encode(random_bytes(32));"et collez le résultat dans.env.
genkey.php dès que vous avez copié la clé. Ne laissez jamais des scripts auxiliaires sur un serveur de production.
- Définissez les permissions de
storage/etbootstrap/cache/sur 755 (récursif) si l'installeur signale des erreurs d'écriture.
Étape 6 — Exécuter l'installeur web
- Ouvrez
https://votredomaine.com/installdans votre navigateur. - Étape 1 : Prérequis — toutes les vérifications doivent réussir (vert). Corrigez toute extension PHP manquante à l'Étape 1 ci-dessus.
- Étape 2 : Base de données — saisissez les noms exacts avec préfixe de l'Étape 3 :
- Hôte:
127.0.0.1orlocalhost - Port:
3306 - Base de données:
cpaneluser_assethub - Utilisateur:
cpaneluser_admin - Mot de passe: (your MySQL password)
- Hôte:
- Étape 3 : Migration — cliquez sur "Run Migrations & Seed". Prend environ 10 secondes. Ne rechargez pas la page.
- Décochez Include demo data pour une installation de production propre.
- Étape 4 : Admin — créez votre compte administrateur.
- Terminé ! — sauvegardez l'URL Cron affichée sur l'écran final.
Étape 7 — Configurer les Cron Jobs pour les alertes e-mail
AssetHub a besoin d'un cron job s'exécutant chaque minute pour que Laravel puisse envoyer des alertes de garantie, des rappels de maintenance et d'autres e-mails planifiés.
- Dans cPanel, accédez à Advanced → Cron Jobs.
- Dans Ajouter un nouveau cron job, définissez la fréquence sur Chaque minute (
* * * * *). - Saisissez la commande (remplacez
CPANELUSERpar votre nom d'utilisateur cPanel des Informations générales) :
Conseil : le chemin PHP peut être/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run/usr/local/bin/phpou/usr/bin/php— renseignez-vous auprès de votre hébergeur en cas de doute. Le chemin artisan est l'endroit où vous avez téléversé le projet (généralement/home/CPANELUSER/public_html/artisan). - Cliquez sur Ajouter un nouveau cron job pour sauvegarder.
public_html/public/ ? Le cron pointe toujours vers /home/CPANELUSER/public_html/artisan — n'ajoutez pas /public/.
- Connectez-vous en tant qu'admin → Paramètres → Système → copiez l'URL Cron.
- Inscrivez-vous sur cron-job.org (gratuit).
- Créez une tâche qui visite cette URL toutes les 15 minutes.
Étape 8 — Configurer le courrier (SMTP)
Créez un compte e-mail cPanel pour les notifications sortantes :
- Accédez à Comptes e-mail → créez par ex.
noreply@votredomaine.com. - Modifiez
.envdans le Gestionnaire de fichiers :MAIL_MAILER=smtp MAIL_HOST=mail.yourdomain.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" - Sauvegardez, puis dans AssetHub : Paramètres → E-mail → Envoyer un e-mail de test.
Problèmes fréquents sur cPanel
"Access denied for user" (SQLSTATE 1045)
- Copiez le nom de la base de données et l'utilisateur exactement depuis cPanel — en incluant le préfixe du compte.
- Confirmez que vous avez complété Ajouter un utilisateur à la base de données avec TOUS LES PRIVILÈGES.
- Réinitialisez le mot de passe MySQL dans cPanel et mettez à jour
.env— utilisez des guillemets autour deDB_PASSWORDs'il contient des caractères spéciaux.
La migration échoue après que l'étape Base de données a réussi
- L'installeur teste les identifiants du formulaire, mais Migrate lit depuis
.env. Assurez-vous que les deux correspondent. - Supprimez
bootstrap/cache/config.phps'il existe, puis réessayez. - Assurez-vous que
DB_CONNECTION=mysqlest défini dans.env(pas sqlite).
"Invalid default value" lors de la migration (1067)
Corrigé dans AssetHub v2.1.0+ (la table checkouts utilise des colonnes dateTime). Si vous avez une version plus ancienne, mettez à jour le fichier de migration ou téléchargez le dernier package depuis CodeCanyon.
"500 Internal Server Error" après le téléversement
- Vérifiez que le fichier
.htaccessracine existe et que PHP est en 8.2+. - Consultez
storage/logs/laravel.logpour voir l'erreur réelle. - Confirmez que
APP_KEYest défini dans.env— une clé vide provoque des erreurs 500.
Pas de Terminal dans cPanel
C'est normal sur de nombreux plans mutualisés. Utilisez SSH Access (si activé), la méthode temporaire genkey.php à l'Étape 5, ou générez la clé sur votre PC local.
La caméra du scanner QR ne s'ouvre pas
Activez SSL via SSL/TLS Status → AutoSSL et accédez au site via https://.
Paramètres
Fichier .env
| Clé | Libellé | 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 (liste recherchable incl.
Europe/Skopje), format de date, code devise (incl.MKD— Denar macédonien), symbole et position du symbole — appliqués à l'ensemble de l'application après enregistrement - Général → Page publique des actifs : visibilité QR (public / connexion / désactivé) et régénération de tous les codes QR après modification de l'URL
- L'onglet Localisation renvoie vers Administration → Translations pour le Translation Editor complet (admin uniquement)
- Branding : nom et logo — met à jour le logo login, le footer, le badge et le titre d'onglet du navigateur (v4.0+). Sous-titre login : modifiez
auth.login_subtitledans Administration → Translations - Appearance (v4.0+) : personnalisez les couleurs de marque, statut et texte pour les modes clair et sombre — voir le guide de rebrand dans la FAQ
Support multilingue
AssetHub est livré avec 11 langues prêtes à l'emploi, dont l'arabe RTL et le hindi. Les utilisateurs changent de langue via le menu déroulant du drapeau en haut à droite.
Langues incluses
| Identifiant | Langue | Sens |
|---|---|---|
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 |
hi | हिन्दी | LTR |
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)
Accédez à Administration → Translations (utilisateurs admin avec la permission manage translations) :
- Cliquez sur "Add Locale" — indiquez un code (ex.
mkpour le macédonien), nom d'affichage, nom natif, nom de fichier SVG du drapeau, direction (LTR/RTL) et une locale de base pour copier les traductions. - La nouvelle locale apparaît dans le sélecteur de langue et dans la liste des langues par défaut de Paramètres → Localisation.
- Les traductions stockées en base remplacent automatiquement les traductions des fichiers dans
lang/{code}/.
Translation Editor
L'éditeur liste chaque clé de traduction regroupée par fichier (ex. assets, nav, settings). Les clés affichent la référence du fichier et toute surcharge en base.
- Filtrez par locale, groupe de traduction ou texte de recherche.
- Cliquez sur une valeur pour l'éditer inline ; les modifications sont enregistrées immédiatement en base.
- Réinitialisez une clé pour revenir à la référence du fichier.
- Les locales intégrées (en, vi, es, …) peuvent être modifiées ; les locales personnalisées sont entièrement pilotées par la base.
- Seuls les utilisateurs disposant de la permission manage translations peuvent accéder à cette page.
CSV import / export
- Export — téléchargez toutes les clés d'une locale au format CSV (
group,key,value). - Import — téléversez un CSV avec les mêmes colonnes ; les surcharges DB existantes sont mises à jour, les nouvelles clés sont insérées.
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.
La langue par défaut du site se configure sous Paramètres → Localisation → Langue par défaut. Chaque utilisateur peut la remplacer via le sélecteur de langue de l'en-tête.
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
- Suivi des quantités batch / lot (v2)
Flux de travail
- Affecter / Retourner / Transférer
- Demandes avec approbation
- Réservation Check-in / Check-out
- Détection de conflits
Entretien
- Planifier préventif/correctif
- Vue calendrier
- Auto-planifier le suivant
- Suivi des coûts
- Rappels par e-mail
Pièces jointes
- 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
- 12 types de rapports
- Export Excel + PDF
- Graphiques et tableaux de bord
- Filtres de date
Opérationnel (v2)
- Actifs batch / lot avec réconciliation en direct
- Allocations aux employés, départements, entrepôt
- Disposals avec approbation à séparation des fonctions
- Page publique de remise QR à /a/{tag}
Localisation et traductions (v3)
- 11 langues UI intégrées + locales personnalisées
- Translation Editor avec recherche, filtre par groupe, édition inline
- Import/export CSV pour les mises à jour de traduction en masse
- Paramètres fuseau horaire et devise appliqués à l'ensemble de l'application
Image de marque & Apparence (v4)
- Le titre de l'onglet du navigateur se met à jour depuis Paramètres → Image de marque → Nom de l'application
- Personnalisez les couleurs dans Paramètres → Apparence (modes clair et sombre)
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 les actifs (unitaires + batch/lot), catégories, maintenance, demandes ; approuver les transferts ; consulter les rapports et l'amortissement |
| Comptable | Gérer les actifs et l'amortissement, exécuter les audits d'inventaire, approuver les transferts et disposals, accès complet aux rapports (orientation financière) |
| 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.
Actifs batch / lot (v2)
Pour des articles identiques en quantité (chaises, claviers, uniformes), choisissez Type de suivi → Batch / Lot sur le formulaire Nouvel actif au lieu de créer des enregistrements en double.
- Saisissez la quantité et l'unité (pièce, lot, boîte). À l'enregistrement, le stock est placé dans le pool entrepôt.
- Ouvrez l'actif → onglet Allocations → Allouer des unités à un employé ou un département.
- Utilisez Retour, Ajustement (endommagé/perdu/réparation) ou les actions de disposition — le résumé en direct doit concorder avec la quantité totale.
- Les actifs batch supportent uniquement le prix unitaire ; l'amortissement est optionnel et désactivé par défaut pour une configuration plus rapide.
php artisan migrate après la mise à jour vers v2 — aucune perte de données.Codes QR
Chaque actif reçoit automatiquement un code QR à la création. Le scan ouvre la page publique ou authentifiée de l'actif (voir ci-dessous). Le scan dans l'application ouvre directement l'écran de détail de l'actif.
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.
Page publique de remise QR (v2)
Chaque actif dispose aussi d'une URL publique imprimable à /a/{asset_tag} — utile pour une remise physique sans connexion.
- Configurez dans Paramètres → Général → Page publique des actifs : Public, Connexion requise ou Désactivé.
- La page affiche la photo, les champs clés et (pour les batch) la répartition des quantités. Les utilisateurs peuvent l'imprimer comme fiche de remise.
- Après modification de
APP_URL, cliquez sur Régénérer tous les codes QR dans le même panneau de paramètres.
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.
Disposals — Mise au rebut formelle (v2)
Les articles usés ou endommagés sont mis au rebut par lots documentés avec séparation des fonctions (proposant ≠ approbateur). Nécessite les permissions manage disposals et approve disposals.
- Barre latérale → Disposals → New Disposal. Définissez le titre et la période (T1–T4, annuelle ou ad hoc).
- Ouvrez le brouillon → Add items — unités batch endommagées éligibles ou actifs unitaires en état Poor.
- Cliquez sur Submit for approval — le lot est verrouillé.
- Un autre approbateur clique sur Approve & execute — les actifs/unités sont marqués comme disposed.
- Imprimez le procès-verbal de mise au rebut (PDF) pour les dossiers de conformité.
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
Douze 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
- Affectations employés (v2) — qui détient quoi, y compris les allocations batch
- Département / Emplacement (v2) — actifs et quantités par département ou emplacement
- Réconciliation d'inventaire (v2) — stock vs alloué vs endommagé/perdu/mis au rebut
- Actifs endommagés (v2) — articles signalés pour réparation ou mise au rebut
Tous les rapports prennent en charge l'export Excel et PDF via les boutons en en-tête de page. Les rapports v2 tiennent compte des quantités (nombre d'actifs + total des unités).
Hooks HTTP
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.
Hébergement mutualisé (Interface Cron Jobs cPanel / Hostinger)
Voir la section Configuration cPanel → Étape 7 ou Configuration Hostinger → Étape 5 pour les instructions avec captures d'écran. En résumé : Advanced → Cron Jobs, commande :
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
Planning : chaque minute (* dans les cinq champs).
Commande cron cPanel
Remplacez CPANELUSER par votre nom d'utilisateur cPanel :
/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
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 |
Upgrade Guides
Step-by-step guides for updating an existing installation. Open the guide that matches your current version.
- v3.1 → v4.0 — Full upgrade guide — Appearance settings, browser tab title from Branding. No migration required.
- v3.0 → v3.1 — Full upgrade guide — Visible languages checklist in navbar picker. No migration required.
- v2.x → v3.0 — Full upgrade guide — Translation Editor, custom locales, localization settings.
- v1.x → v2.0 — Full upgrade guide — Batch assets, disposals, public QR page, operational reports.
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.
Base de données "Access denied" (1045) sur cPanel
Nom d'utilisateur/mot de passe incorrect, affectation manquante de l'utilisateur à la base de données, ou caractères spéciaux dans le mot de passe qui cassent l'analyse de .env. Voir Configuration cPanel → Problèmes fréquents.
Erreur de migration 1067 (Invalid default value)
Le mode strict MySQL sur l'hébergement mutualisé rejette plusieurs colonnes timestamp NOT NULL. Corrigé dans la v2.1.0+. Mettez à jour votre package ou changez checkout_date / expected_return_date en dateTime dans la migration checkouts.
APP_KEY manquant / Erreur 500 avant l'installation
Laravel nécessite APP_KEY dans .env avant le chargement de l'application. Si cPanel n'a pas de Terminal, voir Configuration cPanel → Étape 5 pour les méthodes SSH, genkey.php ou génération locale.
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).
Upgrading from v3.0.x to v3.1
Download the v3.1 package from CodeCanyon, replace application files (keep your .env and storage/ uploads). No new migrations are required. The new visible_locales setting is optional — if unset, all languages remain visible in the navbar picker.
v3.0 → v3.1 — Full upgrade guide
Mise à niveau de v2.x vers v3.0
Téléchargez le ZIP v3 depuis CodeCanyon, remplacez les fichiers de l'application (conservez votre .env et les uploads dans storage/), puis exécutez php artisan migrate. De nouvelles tables pour les locales personnalisées et les surcharges de traduction sont ajoutées automatiquement. Les paramètres et actifs existants sont conservés.
v2.x → v3.0 — Full upgrade guide
Mise à niveau de v1.x vers v2.0
Téléchargez le ZIP v2 depuis CodeCanyon, remplacez les fichiers de l'application (conservez votre .env et les uploads dans storage/), puis exécutez php artisan migrate. La mise à niveau est non destructive — les actifs uniques existants continuent de fonctionner ; les nouvelles tables batch/disposal sont ajoutées automatiquement.
Journal des modifications
v3.1.0 — Visible Language Picker (2026-06)
- Settings → Localization: checklist to choose which languages appear in the navbar language dropdown (built-in + custom locales)
- Default language is always visible; picker auto-hides when only one language is selected
- Backend validates locale switches; users on a hidden locale fall back to the default language
- No database migration required — upgrade is file-replace only
- Branding login : footer et badge suivent Settings → Branding → App Name (sans modification de code)
v3.0.0 — Localisation et Translation Editor (2026-06)
- Interface Translation Editor à Administration → Translations (Ajouter une locale, édition inline, recherche/filtre par groupe)
- Locales personnalisées stockées en base — code, nom d'affichage, nom natif, drapeau SVG, direction, locale de base
- Import/export CSV pour les mises à jour de traduction en masse
- Paramètres de fuseau horaire et de devise appliqués à l'ensemble de l'application (config/localization.php incl. Europe/Skopje, MKD)
- Paramètres → Localisation : listes déroulantes fuseau horaire/devise recherchables avec support de valeurs personnalisées
- Hindi (hi) ajouté comme 11e locale intégrée ; date_format respecté sur les pages Vue
- Gestion des traductions contrôlée par permission ; les surcharges en base fusionnent avec la référence des fichiers lang/
v2.0.0 — Version opérationnelle (2026-06)
- Actifs batch / lot — suivi des quantités, allocations, retours, réconciliation en direct
- 4 rapports opérationnels : Affectations employés, Département/Emplacement, Réconciliation d'inventaire, Actifs endommagés
- Module Disposals — lots de mise au rebut, approbation avec séparation des fonctions, procès-verbal PDF imprimable
- Page publique QR des actifs à
/a/{tag}avec visibilité configurable - Rapports existants mis à jour pour afficher le nombre d'actifs + total des unités
- Les codes QR pointent vers la page publique de remise ; le journal des transactions enregistre la quantité lors des mouvements batch
- Données de démonstration, guide utilisateur (livré séparément dans
documentation/) et chaînes i18n mises à jour
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