AssetHub Документация

Часто задаваемые вопросы

Можно ли запустить AssetHub на самом дешёвом тарифе Hostinger Single?

Да — AssetHub полностью совместим с Hostinger Single (~$2,99/мес). Single включает PHP 8.3, MySQL, нативные Cron Jobs и бесплатный SSL — всё, что нужно AssetHub. Без SSH, Composer и командной строки. Смотрите раздел Настройка Hostinger для пошагового руководства.

Нужны ли технические навыки для установки?

Нет. Веб-установщик делает всё: проверка требований, настройка базы данных, миграции и создание учётной записи admin. Просто загрузите файлы, откройте /install в браузере и следуйте мастеру.

Как работают запланированные письма (уведомления о гарантии/обслуживании)?

AssetHub использует планировщик Laravel. Нужно настроить только один cron job, который запускается каждую минуту, а Laravel внутренне распределяет каждую задачу на нужное время (ежедневно 08:00, ежемесячно и т. д.). На Hostinger настройте его в hPanel → Дополнительно → Cron Jobs. Если у вашего хостинга нет cron, используйте Cron URL из приложения с бесплатным сервисом cron-job.org.

Какие методы амортизации поддерживаются?

Три метода: Линейный (равномерная годовая амортизация), Уменьшаемого остатка (ускоренная, обычно для налоговых целей) и Производственный (по использованию, для производственного оборудования). Стоимость активов автоматически обновляется 1-го числа каждого месяца.

Работает ли сканер QR на телефонах?

Да — он использует камеру браузера через html5-qrcode и работает в любом современном браузере на телефоне/планшете/десктопе. Единственное требование — HTTPS. Hostinger предоставляет бесплатный SSL через Let's Encrypt, так что всё работает из коробки.

Можно ли добавить свои поля без кода?

Да. Админ → Пользовательские поля позволяет добавлять неограниченное число атрибутов (текст, число, дата, выпадающий список, текстовая область, файл, чекбокс), ограничивать их конкретными категориями, отмечать как обязательные и переупорядочивать перетаскиванием — всё из интерфейса.

Сколько языков поддерживает AssetHub?

10 языков из коробки: английский, вьетнамский, испанский, французский, немецкий, китайский, японский, португальский (BR), русский и арабский (с полной поддержкой RTL). Переводы редактируются из Админ → Translations.

Обзор

AssetHub — это полноценная система управления IT-активами, построенная на Laravel 11, Vue 3 и Tailwind CSS. Она помогает организациям отслеживать жизненный цикл оборудования, управлять назначениями, планировать обслуживание, рассчитывать амортизацию и формировать подробные отчёты.

Отслеживание по QR

Автогенерация QR-кодов для каждого актива. Сканируйте любой камерой браузера.

Амортизация

3 метода: линейный, уменьшаемого остатка, производственный.

Пользовательские поля

Неограниченные пользовательские атрибуты — текст, дата, выпадающий список, файл, чекбокс.

Webhook'и

15 типов событий с HMAC-подписью и автоповтором.

Журнал аудита

Каждое изменение фиксируется с полным просмотрщиком diff.

Отчёты

8 отчётов с графиками, экспорт в Excel и PDF.

Требования к серверу

  • PHP 8.2 или выше
  • MySQL 5.7+ или MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ и npm 9+
  • Веб-сервер: Apache или Nginx

Необходимые расширения PHP

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

Дисковое пространство

Минимум ~ 200 МБ. Зарезервируйте дополнительно место для фотографий активов и вложений документов.

Установка

Вариант A — Веб-установщик (Рекомендуется)

  1. Загрузите файлы проекта на ваш веб-сервер.
  2. Укажите document root домена на public/.
  3. Установите права: storage/ и bootstrap/cache/ должны быть доступны для записи (chmod 775).
  4. Скопируйте .env.example в .env и выполните php artisan key:generate.
  5. Откройте https://yourdomain.com/install в браузере.
  6. Следуйте мастеру — Requirements → Database → Migrate → Admin Account → Done.

Вариант B — Установка через CLI

# 1. Установить зависимости
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Настроить окружение
cp .env.example .env
php artisan key:generate

# 3. Отредактировать .env для учётных данных БД
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Создать таблицы БД и заполнить начальные данные
php artisan migrate --seed

# 5. Создать symlink storage для загрузок
php artisan storage:link

# 6. Кэшировать конфиг для production
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Отметить как установленный
echo "Installed" > storage/installed.lock
Настройка веб-сервера: Document root должен указывать на каталог public/. Для Apache включённый .htaccess обрабатывает перезапись URL. Для Nginx см. руководство по развёртыванию 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 (Локальная разработка)

Краткое руководство по запуску AssetHub на вашем компьютере для тестирования или разработки перед деплоем в продакшн. Выберите среду, подходящую вашей операционной системе.

Рекомендуется: Laravel Herd — самый быстрый путь на macOS и Windows: без Docker, без ручной настройки Apache/MySQL. XAMPP и Laragon — хорошие бесплатные альтернативы, если вы предпочитаете традиционный стек.

Вариант 1 — Laravel Herd (Рекомендуется, macOS и Windows)

Laravel Herd — официальная локальная среда от команды Laravel: бесплатная, нативная, без Docker. Включает PHP 8.2/8.3/8.4, Nginx и (в Herd Pro) MySQL/Redis.

  1. Скачайте и установите Laravel Herd с herd.laravel.com.
  2. Поместите папку проекта AssetHub в ~/Herd/ (macOS) или %USERPROFILE%\Herd\ (Windows). Herd автоматически создаст домен .test — например http://assethub.test.
  3. Откройте Herd → Sites и подтвердите версию PHP 8.2 или 8.3. Правая кнопка по сайту → Secure, чтобы включить HTTPS (нужно для QR-сканера).
  4. Создайте базу MySQL. В Herd Pro используйте Services → MySQL → Open in TablePlus. Иначе установите MySQL Community или используйте SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Скопируйте .env.example в .env, заполните учётные данные БД и выполните php artisan key:generate в корне проекта.
  6. Откройте http://assethub.test/install в браузере и следуйте мастеру установки.

Вариант 2 — XAMPP (Windows, macOS, Linux)

XAMPP упаковывает Apache, MySQL/MariaDB и PHP. Бесплатно и кроссплатформенно. Обязательно выберите версию с PHP 8.2 или новее.

  1. Скачайте XAMPP 8.2+ с apachefriends.org и установите.
  2. Скопируйте проект AssetHub в C:\xampp\htdocs\AssetHub\ (Windows) или /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Откройте XAMPP Control Panel и запустите Apache и MySQL. Если порты заняты, используйте Config → service.conf, чтобы переключить Apache на 8080.
  4. Перейдите на http://localhost/phpmyadminСоздать → создайте БД assethub с сопоставлением utf8mb4.
  5. В папке проекта: скопируйте .env.example в .env, задайте DB_DATABASE=assethub, DB_USERNAME=root, оставьте DB_PASSWORD пустым (по умолчанию XAMPP). Выполните php artisan key:generate.
  6. Откройте http://localhost/AssetHub/public/install для запуска мастера установки.
Чистые URL без /public/: создайте виртуальный хост в C:\xampp\apache\conf\extra\httpd-vhosts.conf, указав DocumentRoot на папку public/ проекта, затем добавьте 127.0.0.1 assethub.local в файл hosts.

Вариант 3 — Laragon (Windows)

Laragon — портативный Windows-стек, разработанный для Laravel: автоматические vhost, чистые URL, MySQL/MariaDB и встроенный HeidiSQL.

  1. Скачайте Laragon Full с laragon.org и установите.
  2. В Laragon: Меню → PHP → Version — переключите на PHP 8.2 или 8.3.
  3. Скопируйте проект AssetHub в C:\laragon\www\AssetHub\.
  4. Нажмите Start All. Laragon автоматически создаст vhost: http://assethub.test (указывает на папку public/).
  5. Откройте HeidiSQL (встроен) → создайте базу assethub. Учётные данные по умолчанию: пользователь root, пароль пустой.
  6. Отредактируйте .env с учётными данными БД, выполните php artisan key:generate и откройте http://assethub.test/install.

Вариант 4 — Встроенный PHP-сервер (без веб-сервера)

Самый простой вариант: Laravel поставляется с artisan serve, который запускает разработческий PHP-сервер. Apache или Nginx не нужны. Лучше всего для быстрого тестирования.

# Установить зависимости и настроить
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Запустить миграции и заполнить начальные данные
php artisan migrate --seed

# Запустить dev-сервер
php artisan serve
# Затем откройте: http://127.0.0.1:8000/install

Частые подводные камни localhost

QR-сканер не открывает камеру по http://

API камеры браузера требуют HTTPS, с одним исключением: http://localhost и http://127.0.0.1 считаются безопасными контекстами. Если открыть AssetHub по LAN IP (например http://192.168.1.10), камера будет отклонена. Для разработки используйте localhost или включите HTTPS через Herd / mkcert.

Permission denied на storage (macOS / Linux)

Если возникают ошибки записи, когда приложение логирует или кеширует, исправьте права: chmod -R 775 storage bootstrap/cache. На Windows обычно не требуется.

Порт уже занят

Если порт 8000 занят другим приложением, используйте другой:

php artisan serve --port=8001

Тестирование email локально

Реальный SMTP недоступен в большинстве localhost-настроек. Два безопасных варианта: (1) задайте MAIL_MAILER=log в .env — письма сохраняются в storage/logs/laravel.log вместо отправки; или (2) используйте Mailtrap / MailHog, чтобы перехватывать исходящую почту в фальшивый ящик.

MAIL_MAILER=log
# Все письма записываются в storage/logs/laravel.log

Frontend-ассеты (Vite / Tailwind)

Vue/Tailwind фронтенд AssetHub предварительно собран в пакете. Если вы редактируете Vue-компоненты или конфиг Tailwind, понадобится Node.js 18+:

npm install
npm run dev    # Горячая перезагрузка во время разработки
npm run build  # Production-сборка (выполнить перед деплоем)

Развёртывание на Hostinger Single (Shared Hosting)

Это рекомендуемый путь для пользователей без VPS или технического опыта. AssetHub полностью совместим с самым дешёвым тарифом Hostinger Single Web Hosting (~$2,99/мес). Без SSH, Composer и командной строки — Single включает нативные cron jobs, PHP 8.3 и бесплатный SSL.

Протестировано на: тарифах Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, нативные Cron Jobs включены во всех тарифах).

Шаг 1 — Подготовка хостинга

  1. Войдите в Hostinger hPanel.
  2. Перейдите в Хостинг → Управление для вашего домена.
  3. Установите версию PHP на 8.2 или 8.3 через Дополнительно → Конфигурация PHP.
  4. Убедитесь, что эти расширения PHP включены (обычно по умолчанию):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Шаг 2 — Создание базы данных MySQL

  1. В hPanel перейдите в Базы данных → MySQL Databases.
  2. Нажмите Создать новую базу данных.
  3. Запишите эти 3 значения:
    • Имя базы данных — напр. u123_AssetHub
    • Имя пользователя — напр. u123_admin
    • Пароль — автоматически сгенерированный, храните в безопасности

Шаг 3 — Загрузка файлов

  1. Перейдите в Файлы → File Manager в hPanel.
  2. Перейдите в public_html/ (это корень вашего домена).
  3. Удалите любые дефолтные index.html или default.php в этой папке.
  4. Нажмите Загрузить файлы и загрузите весь source.zip из пакета.
    Или загрузите содержимое папки /source/ напрямую через FTP, если предпочитаете.
  5. Если загрузили ZIP, правая кнопка → Распаковать. После распаковки все файлы должны быть в корне public_html/.
  6. Убедитесь, что public_html/ содержит: app/, public/, vendor/, .htaccess, index.phppublic/), .env и т. д.
Важно: Убедитесь, что файл .htaccess существует в корне public_html/. Он содержит правила переписывания URL. Если File Manager скрывает скрытые файлы, нажмите Настройки → Показать скрытые файлы.

Шаг 4 — Запуск установщика

  1. Откройте браузер и перейдите по https://yourdomain.com/install.
  2. Вы увидите AssetHub Installer.
  3. Шаг 1: Requirements — Все проверки должны быть пройдены (зелёные). Если какие-то не пройдены, свяжитесь с поддержкой Hostinger для включения недостающего PHP-расширения.
  4. Шаг 2: Database — Введите учётные данные из Шага 2 выше:
    • Хост: localhost
    • Порт: 3306
    • База данных: u123_AssetHub
    • Имя пользователя: u123_admin
    • Пароль: (сгенерированный Hostinger)
  5. Шаг 3: Migrate — Нажмите "Run Migrations & Seed". Занимает ~10 секунд. Не обновляйте страницу.
  6. Шаг 4: Admin — Создайте учётную запись администратора. Используйте надёжный пароль.
  7. Готово! — Вы увидите Cron URL (сохраните!) и кнопку входа.

Шаг 5 — Настройка автоматических e-mail-уведомлений через Hostinger Cron

AssetHub использует планировщик Laravel для фоновых задач: уведомления о гарантии, напоминания об обслуживании, окончание документов, обновление амортизации и просроченные checkout. Настройте один cron job в hPanel, и Laravel решит, какую задачу когда запускать.

  1. В hPanel перейдите в Дополнительно → Cron Jobs.
  2. Нажмите Создать Cron job.
  3. Выберите тип: Custom (не "PHP" — нам нужно передать аргумент).
  4. Для команды введите (замените uXXXXXX на ваше имя пользователя Hostinger):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Совет: откройте File Manager, найдите файл artisan (корень проекта), правая кнопка → Свойства, чтобы скопировать полный путь.
  5. Установите расписание на Каждую минуту — все пять полей (Минуты, Часы, День, Месяц, День недели) на *.
  6. Нажмите Сохранить.

Готово — AssetHub теперь автоматически отправляет напоминания о просроченных checkout, уведомления о обслуживании, окончании документов, гарантии и обновляет значения амортизации. Laravel внутренне планирует каждую задачу с правильной частотой (ежедневно 08:00, ежемесячно и т. д.).

Document root установлен на public_html/public/? Не проблема — ваш код Laravel по-прежнему в корне public_html/, поэтому путь cron остаётся /home/uXXXX/public_html/artisan (не добавляйте /public/).
Резервный вариант для хостингов без cron: Если вы не на Hostinger или ваш провайдер не поддерживает cron jobs, AssetHub также предоставляет URL для запуска через webhook.
  1. Войдите как admin → Настройки → вкладка Система → скопируйте ваш Cron URL.
  2. Бесплатно зарегистрируйтесь на cron-job.org.
  3. Создайте cronjob, вставьте URL, установите Каждые 15 минут, сохраните.

Шаг 6 — Настройка e-mail (SMTP)

Hostinger предоставляет почтовые учётные записи с каждым тарифом. Чтобы использовать их для уведомлений AssetHub:

  1. В hPanel перейдите в Email → Почтовые ящики и создайте один (напр. noreply@yourdomain.com).
  2. Отредактируйте файл .env в public_html/ через 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. Сохраните файл.
  4. Войдите в AssetHub → Настройки → вкладка Email → Отправить тестовое письмо. Если получили — готово.
Ограничения SMTP на Single: Hostinger Single позволяет ~100 исходящих писем в час. Для больших развёртываний используйте специализированных провайдеров вроде SendGrid, Mailgun или Postmark (с бесплатными тарифами).

Частые проблемы на Hostinger Single

"500 Internal Server Error" после загрузки

  • Проверьте, что .htaccess существует в корне public_html/ и содержит правила rewrite.
  • Проверьте, что версия PHP установлена на 8.2 или 8.3 в hPanel.
  • Проверьте storage/logs/laravel.log через File Manager для реальной ошибки.

"Permission denied" при загрузках

Hostinger обычно устанавливает правильные права, но если нет:

  • Правая кнопка на storage/ в File Manager → Права → установите 755 рекурсивно.
  • То же для bootstrap/cache/.

Сканер QR не открывает камеру

API камеры браузера требуют HTTPS. Hostinger предоставляет бесплатный SSL через Let's Encrypt — включите его в hPanel в SSL → Управление.

Запланированные письма не отправляются

  • В hPanel → Cron Jobs → проверьте колонку Last run у вашей записи cron. Если пусто, cron не запускается — проверьте путь к artisan.
  • Протестируйте команду вручную: откройте Terminal в hPanel (если доступен) и запустите команду cron. Если возникнет ошибка, сообщение укажет на проблему (не та версия PHP, не тот путь и т. д.).
  • Проверьте, что SMTP правильно настроен (Настройки → Email → Отправить тест).
  • Проверьте storage/logs/laravel.log на ошибки планировщика.

Медленная производительность

Hostinger Single использует общие CPU/RAM. Если у вас в команде более 20 пользователей, рассмотрите:

  • Обновление до Premium (~$3,99/мес) — более быстрые серверы, больше ресурсов, несколько баз данных.
  • Или Business (~$5,99/мес) — выделенные ресурсы, ежедневные бэкапы, среда staging.

Конфигурация

Файл .env

КлючОписаниеПример
APP_NAMEИмя приложения, отображаемое в заголовкеAssetHub
APP_URLПубличный URL вашей установкиhttps://assets.example.com
APP_DEBUGУстановите false на productionfalse
DB_*Параметры подключения к БДmysql, 127.0.0.1, 3306, ...
MAIL_MAILERДрайвер почтыsmtp, log, mailgun
MAIL_HOSTХост SMTP-сервераsmtp.gmail.com
MAIL_PORTПорт SMTP587
MAIL_USERNAMEИмя пользователя SMTPyour@email.com
MAIL_PASSWORDПароль SMTP или app token**********
MAIL_FROM_ADDRESSАдрес From по умолчаниюnoreply@example.com

Настройки в приложении

Большинство не чувствительных опций настраиваются из Админ → Настройки:

  • Общие: имя/email/телефон компании, префикс asset tag
  • Email: отправить тестовое письмо для проверки SMTP
  • Уведомления: пороги предупреждения гарантии, окно напоминания об обслуживании
  • Локализация: часовой пояс, формат даты, валюта

Поддержка нескольких языков

AssetHub поставляется с 10 языками "из коробки", включая арабский с RTL. Пользователи переключают язык через выпадающее меню флагов в правом верхнем углу.

Встроенные языки

КодЯзыкНаправление
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

Как переключить язык

  1. Нажмите на иконку флага в правом верхнем углу, чтобы открыть меню.
  2. Выберите ваш язык из списка.
  3. Страница перезагрузится; все метки UI, даты и форматы валют переключатся.
  4. Ваш выбор сохраняется как в вашей учётной записи, так и в cookie (1 год).
Не открывайте .html файлы приложения напрямую. AssetHub — это серверное приложение Laravel + Vue. Переключение языка отправляет POST на /locale/{code}, что работает только при запущенном PHP-сервере. Всегда заходите через ваш реальный домен (продакшен) или http://localhost:8000 (разработка с php artisan serve). А вот файлы документации, такие как этот, полностью автономны и могут быть открыты напрямую.

Добавление пользовательского языка (админ)

Админ → Настройки → Переводы:

  • Нажмите "Добавить локаль" — укажите код (например, th для тайского), отображаемое имя, родное имя, флаг, направление и базовую локаль для копирования переводов.
  • Редактируйте переводы прямо в редакторе переводов или через импорт/экспорт CSV.
  • Переводы из БД автоматически переопределяют файловые переводы.

Локаль по умолчанию для пользователя

У каждого пользователя есть колонка locale. Email-уведомления автоматически отправляются на предпочитаемом языке получателя благодаря контракту HasLocalePreference Laravel.

Список функций

Управление активами

  • Автогенерация asset tag
  • Несколько изображений на актив
  • Генерация QR-кода
  • Отслеживание статуса и состояния
  • Массовый импорт/экспорт
  • Клонирование актива

Рабочие процессы

  • Назначить / Вернуть / Передать
  • Запросы с утверждением
  • Бронирование Check-in / Check-out
  • Обнаружение конфликтов

Обслуживание

  • Планирование профилактики/корректирующего
  • Календарный вид
  • Автопланирование следующего
  • Отслеживание затрат
  • E-mail-напоминания

Документы

  • Прикреплять счета, руководства
  • Inline-просмотр
  • Уведомления об окончании
  • Различные типы документов

Амортизация

  • 3 метода расчёта
  • Автообновление стоимости
  • График графика
  • Годовой свод

Отчёты

  • 8 типов отчётов
  • Экспорт Excel + PDF
  • Графики и дашборды
  • Фильтры по дате

Пользователи и роли

AssetHub поставляется с 5 предустановленными ролями:

РольВозможности
AdminПолный доступ к системе — пользователи, отделы, настройки, журнал аудита, webhook'и, переводы
IT-менеджерУправление активами, категориями, обслуживанием, запросами; утверждение передач; просмотр отчётов и амортизации
БухгалтерУправление активами и амортизацией, проведение инвентаризаций, утверждение передач, полный доступ к отчётам (фокус финансовый)
СупервайзерУтверждение запросов отдела, управление checkout, участие в инвентаризациях, просмотр отчётов
СотрудникПросмотр назначенных активов, создание запросов, управление своими checkout

Права хранятся как роли Spatie — администраторы могут тонко настраивать каждое право через БД.

Управление активами

Создание активов

  1. Перейдите в Активы → Новый актив.
  2. Заполните имя, категорию, бренд, модель, серийный номер.
  3. Добавьте дату покупки и цену (требуется для амортизации).
  4. Загрузите изображения (поддерживается несколько файлов, максимум 5 МБ каждый).
  5. Сохраните — asset tag и QR-код генерируются автоматически.

Формат Asset Tag

По умолчанию: {PREFIX}-{YEAR}-{NNNN}, напр. AS-2026-0001. Настраивается через Настройки → Общие → Префикс Asset Tag.

Массовый импорт

  1. Нажмите Импорт на странице Активов.
  2. Скачайте шаблон Excel.
  3. Заполните данные — обязательные колонки: name, category_name.
  4. Загрузите файл.

QR-коды

Каждый актив автоматически получает QR-код при создании. QR кодирует URL актива, поэтому сканирование сразу ведёт пользователя на страницу деталей актива.

Печать этикеток

  • Одиночная этикетка: нажмите иконку принтера в любой строке актива.
  • Формат PDF: A4, 2 этикетки в строке, включает asset tag, имя, бренд, серийный номер.

Сканирование

Нажмите Сканировать QR на странице Активов. Разрешите доступ к камере. Сканер использует html5-qrcode и работает в любом современном браузере. Примечание: доступ к камере требует HTTPS или localhost.

Рабочие процессы

Назначение актива

  1. Откройте страницу деталей актива.
  2. Нажмите Назначить (видно, если актив доступен).
  3. Выберите пользователя, опциональную дату возврата, заметки.
  4. Отправьте — создаётся транзакция и отправляется e-mail-уведомление.

Запросы активов

Сотрудники могут отправлять запросы на нужные активы. У запросов 4 статуса: pending → approved → fulfilled или rejected. Письма утверждения отправляются автоматически.

Check-in / Check-out

Для общих активов (камеры, проекторы, транспорт). У бронирований есть диапазоны дат; система предотвращает пересекающиеся checkout. Календарный вид показывает все бронирования с одного взгляда.

Амортизация

AssetHub рассчитывает амортизацию активов одним из трёх методов:

МетодФормулаПрименение
Линейный(Cost - Salvage) / Useful LifeСамый распространённый; равномерная годовая амортизация
Уменьшаемого остатка2 / Useful Life × Book ValueУскоренный; для налоговых целей
ПроизводственныйПо использованиюПроизводственное оборудование

Значения по умолчанию наследуются от категории актива. Записи графика генерируются ежемесячно. current_value актива автоматически обновляется 1-го числа каждого месяца.

Пользовательские поля

Админ → Пользовательские поля позволяет добавить неограниченное число пользовательских атрибутов к активам:

  • Типы: текст, число, дата, выпадающий список, текстовая область, файл, чекбокс
  • Область: применить ко всем категориям или к конкретной
  • Перестановка: перетаскивание за ручку
  • Обязательные поля проверяются при сохранении актива

Отчёты

Восемь встроенных отчётов, доступных из меню Отчёты:

  1. Сводка активов — итоги по статусу, состоянию, категории, отделу
  2. Амортизация — потеря стоимости по категории, наиболее амортизированные активы
  3. Транзакции — активность назначения, возврата, передачи во времени
  4. Стоимость обслуживания — расходы по месяцу, категории, типу
  5. Окончание гарантии — активы, требующие внимания через 30/60/180 дней
  6. Активы по отделам — распределение активов и использование бюджета по отделам
  7. Активы по источнику — распределение по закупке, проекту, пожертвованию, передаче
  8. Сводка инвентаризации — расхождения по периодическим циклам аудита

Все отчёты поддерживают экспорт в Excel и PDF через кнопки в заголовке страницы.

Webhook'и

AssetHub может уведомлять внешние сервисы о ключевых событиях.

Доступные события

  • 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

Формат 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
  }
}

Проверка подписи

Если настроен secret, запросы содержат заголовок X-AssetHub-Signature с HMAC-SHA256 тела. Проверяйте на вашей стороне:

$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
  // валидно
}

Политика повторов

Неудачные доставки повторяются 3 раза с задержкой 200 мс. После 10 последовательных сбоев webhook автоматически отключается.

Запланированные задачи

AssetHub использует планировщик Laravel для фоновых задач. Вам нужна только одна запись cron — Laravel внутренне распределяет каждую задачу в нужное время.

Hostinger / Shared hosting (UI Cron Jobs в hPanel)

См. раздел Настройка Hostinger → Шаг 5 для инструкций со скриншотами. Кратко: Дополнительно → Cron Jobs → Custom, команда:

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

Расписание: каждую минуту (* во всех пяти полях).

VPS / выделенный сервер (crontab)

Запустите crontab -e от имени веб-пользователя (часто www-data) и добавьте:

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

Резервный вариант: внешний URL-пингер

Если у вашего хостинга вообще нет cron, используйте Cron URL в приложении (Настройки → вкладка Система) с cron-job.org (бесплатно, каждые 15 мин).

Задачи, выполняемые автоматически

ВремяКомандаНазначение
Ежедневно 08:00send-overdue-checkout-alertsE-mail-напоминания о просроченных checkout
Ежедневно 08:30send-maintenance-remindersНапоминания о предстоящем обслуживании
Ежедневно 09:00send-document-expiry-alertsДокументы, истекающие через 30/14/7/1 дней
Ежедневно 09:30send-warranty-alertsУведомления об окончании гарантии + страховки
Ежедневно 10:00assethub:send-depreciation-end-alertsУведомления, когда активы достигают конца срока службы
Ежедневно 10:30send-inventory-audit-remindersНапоминания для активных инвентаризаций
Ежемесячно 1-го числа, 02:00update-asset-valuesОбновить current_value актива из амортизации

Устранение неполадок

"Permission denied" на storage

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

Сканер QR не открывает камеру

API камеры браузера требуют HTTPS. Установите SSL-сертификат или используйте localhost для тестирования.

Письма не приходят

Проверьте storage/logs/laravel.log на ошибки. Используйте Настройки → Email → Отправить тестовое письмо для проверки учётных данных SMTP. Убедитесь, что ваш SMTP-сервер разрешает отправляющий IP.

Сброс установки

Удалите storage/installed.lock и зайдите снова на /install. Существующие данные будут стёрты, если вы перезапустите миграции.

Производительность — медленный список активов

Запустите php artisan optimize для кэширования config, routes, views. Убедитесь, что у MySQL есть индексы на assets.asset_tag, assets.serial_number, assets.status (создаются автоматически миграциями).

Журнал изменений

v1.0.0 — Первоначальный релиз (2026-05)

  • CRUD активов с автогенерацией QR-кода
  • 5 пользовательских ролей (Admin, IT-менеджер, Бухгалтер, Супервайзер, Сотрудник) с детальными правами
  • Отслеживание Источника актива (централизованная закупка, децентрализованная закупка, инвестиционный проект, пожертвование, внутренняя передача)
  • Процессы назначения, возврата с e-mail-уведомлениями
  • Процесс утверждения передач (pending → approved/rejected) с контролем прав
  • Процесс утверждения запросов активов
  • Check-in/check-out с календарным видом
  • Планирование обслуживания с автообновлением
  • Вложения документов с уведомлениями об окончании
  • Амортизация с 3 методами расчёта + уведомления о конце срока службы
  • Модуль инвентаризации — периодическая инвентаризация с отслеживанием расхождений
  • Пользовательские поля с 7 типами ввода и drag-drop сортировкой
  • 8 отчётов с графиками, экспорт в Excel и PDF (вкл. Активы по источнику, Сводка инвентаризации)
  • Журнал аудита через Spatie Activitylog с просмотрщиком diff
  • Webhook'и с HMAC-подписью и автоповтором
  • Многоязычный UI: 10 локалей (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar с RTL)
  • UI настроек для компании, e-mail, уведомлений, локализации, переводов
  • Веб-мастер установки
  • Тёмный режим с палитрой emerald-teal

Благодарности

Используемые open-source библиотеки