البدء
ثبّت AssetHub على Hostinger أو VPS الخاص بك في أقل من 10 دقائق.
المستخدمون والأدوار
5 أدوار جاهزة بصلاحيات Spatie، قابلة للضبط الدقيق لكل مستخدم.
ميزات المنتج
الأصول وسير العمل والصيانة والإهلاك وسجل التدقيق والمزيد.
التخصيص
أضف حقولاً مخصصة بلا حدود، وغيّر العلامة التجارية واللغات والمظاهر.
إعداد Hostinger
نشر تفصيلي خطوة بخطوة على باقة Single المشتركة الأرخص.
الأمن ورمز QR
HTTPS وWebhooks موقّعة HMAC وسجل تدقيق ومسح QR عبر الكاميرا.
التقارير والتصدير
8 تقارير مدمجة مع تصدير Excel + PDF وتصفية حسب التاريخ.
تنبيهات البريد
تذكيرات الضمان والصيانة وانتهاء الوثائق وعمليات الإخراج المتأخرة.
الأسئلة الشائعة
هل يمكنني تشغيل AssetHub على باقة Hostinger Single الأرخص؟
نعم — AssetHub متوافق تمامًا مع Hostinger Single (~$2.99/شهر). تتضمّن باقة Single نسخة PHP 8.3 وMySQL وCron Jobs أصلية وSSL مجاني — كل ما يحتاجه AssetHub. لا حاجة لـ SSH ولا Composer ولا سطر الأوامر. راجع قسم إعداد Hostinger للحصول على دليل خطوة بخطوة.
هل أحتاج إلى مهارات تقنية لتثبيته؟
لا. المثبّت الويب يتكفّل بكل شيء: فحص المتطلبات وإعداد قاعدة البيانات وعمليات Migration وإنشاء حساب المسؤول. فقط ارفع الملفات، وافتح /install في متصفحك، واتبع المعالج.
كيف تعمل رسائل البريد المجدولة (تنبيهات الضمان/الصيانة)؟
يستخدم AssetHub مجدّول Laravel. تحتاج فقط إلى إعداد cron job واحد يعمل كل دقيقة، ويُوزّع Laravel داخليًا كل مهمة على وقتها الصحيح (يوميًا 08:00، شهريًا، إلخ). على Hostinger، اضبطه عبر hPanel ← المتقدّم ← Cron Jobs. إذا لم يكن لدى مضيفك cron، استخدم رابط Cron داخل التطبيق مع الخدمة المجانية cron-job.org.
ما طرق الإهلاك المدعومة؟
ثلاث طرق: القسط الثابت (إهلاك سنوي متساوٍ)، الرصيد المتناقص (متسارع، شائع للأغراض الضريبية)، ووحدات الإنتاج (حسب الاستخدام، لمعدات التصنيع). تُحدَّث قيم الأصول تلقائيًا في أول يوم من كل شهر.
هل يعمل ماسح QR على الهواتف المحمولة؟
نعم — يستخدم كاميرا المتصفح عبر html5-qrcode ويعمل على أي متصفح حديث للهاتف/اللوحي/سطح المكتب. الشرط الوحيد هو HTTPS. يوفّر Hostinger SSL مجاني عبر Let's Encrypt، لذا يعمل مباشرة.
هل يمكنني إضافة حقول خاصة بي دون برمجة؟
نعم. المسؤول ← الحقول المخصصة يتيح لك إضافة سمات بلا حدود (نص، رقم، تاريخ، اختيار، منطقة نص، ملف، مربع اختيار)، وحصرها بفئات محددة، وتعليمها كإلزامية، وإعادة ترتيبها بالسحب والإفلات — كل ذلك من الواجهة.
كم لغة يدعم AssetHub؟
10 لغات جاهزة: الإنجليزية والفيتنامية والإسبانية والفرنسية والألمانية والصينية واليابانية والبرتغالية (BR) والروسية والعربية (مع دعم RTL كامل). الترجمات قابلة للتحرير من المسؤول ← Translations.
نظرة عامة
AssetHub هو نظام كامل لإدارة أصول تكنولوجيا المعلومات، مبني على Laravel 11 وVue 3 وTailwind CSS. يساعد المؤسسات في تتبّع دورة حياة المعدات، وإدارة الإسنادات، وجدولة الصيانة، وحساب الإهلاك، وإنشاء تقارير مفصّلة.
تتبّع برمز QR
توليد رموز QR تلقائيًا لكل أصل. امسح بأي كاميرا متصفح.
الإهلاك
3 طرق: القسط الثابت، الرصيد المتناقص، وحدات الإنتاج.
الحقول المخصصة
أضف سمات مخصصة بلا حدود — نص، تاريخ، اختيار، ملف، مربع اختيار.
Webhooks
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 — المثبّت الويب (موصى به)
- ارفع ملفات المشروع إلى خادم الويب الخاص بك.
- وجّه document root للنطاق إلى
public/. - اضبط الصلاحيات: يجب أن تكون
storage/وbootstrap/cache/قابلة للكتابة (chmod 775). - انسخ
.env.exampleإلى.envونفّذphp artisan key:generate. - افتح
https://yourdomain.com/installفي متصفحك. - اتبع المعالج — 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
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
# 4. إنشاء جداول قاعدة البيانات وزرع البيانات الأولية
php artisan migrate --seed
# 5. إنشاء storage symlink للتحميلات
php artisan storage:link
# 6. تخزين مؤقت للإعدادات للإنتاج
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 7. التعليم كمثبّت
echo "Installed" > storage/installed.lock
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).
| 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.
الجهاز المحلي (التطوير المحلي)
دليل سريع لتشغيل AssetHub على جهاز الكمبيوتر الخاص بك لأغراض الاختبار أو التطوير قبل النشر إلى الإنتاج. اختر البيئة التي تطابق نظام التشغيل لديك.
الخيار 1 — Laravel Herd (موصى به، macOS و Windows)
Laravel Herd هي البيئة المحلية الرسمية من فريق Laravel — مجانية، أصلية، بدون Docker. تتضمّن PHP 8.2/8.3/8.4 وNginx و(في Herd Pro) MySQL/Redis.
- حمّل وثبّت Laravel Herd من herd.laravel.com.
- ضع مجلد مشروع AssetHub داخل
~/Herd/(macOS) أو%USERPROFILE%\Herd\(Windows). يُنشئ Herd تلقائيًا نطاقًا بصيغة.test— مثلًاhttp://assethub.test. - افتح Herd ← Sites وتحقّق من أن إصدار PHP هو 8.2 أو 8.3. انقر بالزر الأيمن على الموقع ← Secure لتفعيل HTTPS (مطلوب لماسح QR).
- أنشئ قاعدة بيانات MySQL. مع Herd Pro، استخدم Services ← MySQL ← Open in TablePlus. وإلا ثبّت MySQL Community أو استخدم SQLite (
DB_CONNECTION=sqlite،touch database/database.sqlite). - انسخ
.env.exampleإلى.env، املأ بيانات اعتماد قاعدة البيانات، ثم نفّذphp artisan key:generateمن جذر المشروع. - افتح
http://assethub.test/installفي متصفحك واتبع معالج التثبيت.
الخيار 2 — XAMPP (Windows وmacOS وLinux)
XAMPP يجمع Apache وMySQL/MariaDB وPHP. مجاني ومتعدد المنصات. احرص على اختيار إصدار بـ PHP 8.2 أو أحدث.
- حمّل XAMPP 8.2+ من apachefriends.org وثبّته.
- انسخ مشروع AssetHub إلى
C:\xampp\htdocs\AssetHub\(Windows) أو/Applications/XAMPP/htdocs/AssetHub/(macOS). - افتح XAMPP Control Panel وشغّل Apache وMySQL. إذا كانت المنافذ مشغولة، استخدم Config ← service.conf لتغيير Apache إلى 8080.
- اذهب إلى
http://localhost/phpmyadmin← جديد ← أنشئ قاعدة بيانات باسمassethubبترتيب utf8mb4. - في مجلد المشروع: انسخ
.env.exampleإلى.env، اضبطDB_DATABASE=assethub،DB_USERNAME=root، اتركDB_PASSWORDفارغًا (افتراضي XAMPP). نفّذphp artisan key:generate. - زر
http://localhost/AssetHub/public/installلتشغيل معالج التثبيت.
/public/: أنشئ مضيفًا افتراضيًا في C:\xampp\apache\conf\extra\httpd-vhosts.conf يشير DocumentRoot إلى مجلد public/ الخاص بالمشروع، ثم أضف 127.0.0.1 assethub.local إلى ملف hosts.
الخيار 3 — Laragon (Windows)
Laragon بيئة Windows محمولة مصمّمة لـ Laravel — vhosts تلقائية، روابط نظيفة، MySQL/MariaDB وHeidiSQL مدمج.
- حمّل Laragon Full من laragon.org وثبّته.
- في Laragon: القائمة ← PHP ← Version — بدّل إلى PHP 8.2 أو 8.3.
- انسخ مشروع AssetHub إلى
C:\laragon\www\AssetHub\. - اضغط على Start All. ينشئ Laragon vhost تلقائيًا:
http://assethub.test(يشير إلى مجلدpublic/). - افتح HeidiSQL (مدمج) ← أنشئ قاعدة البيانات
assethub. بيانات الاعتماد الافتراضية: المستخدمroot، كلمة المرور فارغة. - حرّر
.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
# تشغيل migration وبذر البيانات الأولية
php artisan migrate --seed
# تشغيل خادم التطوير
php artisan serve
# ثم زر: http://127.0.0.1:8000/install
مزالق شائعة في الجهاز المحلي
ماسح QR لا يفتح الكاميرا على http://
تتطلّب واجهات الكاميرا في المتصفح HTTPS، مع استثناء واحد: http://localhost وhttp://127.0.0.1 يُعامَلان كسياقات آمنة. إذا فتحت AssetHub عبر 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
اختبار البريد محليًا
SMTP الحقيقي غير متاح في معظم إعدادات الجهاز المحلي. خياران آمنان: (1) اضبط MAIL_MAILER=log في .env — تُكتب الرسائل في storage/logs/laravel.log بدلًا من إرسالها؛ أو (2) استخدم Mailtrap / MailHog لالتقاط البريد الصادر في صندوق وارد وهمي.
MAIL_MAILER=log
# كل الرسائل تُكتب في storage/logs/laravel.log
أصول الواجهة الأمامية (Vite / Tailwind)
واجهة Vue/Tailwind لـ AssetHub مبنية مسبقًا في الحزمة. إذا حرّرت مكوّنات Vue أو إعدادات Tailwind فستحتاج Node.js 18+:
npm install
npm run dev # إعادة تحميل ساخنة أثناء التطوير
npm run build # بناء الإنتاج (يُنفَّذ قبل النشر)
النشر على Hostinger Single (استضافة مشتركة)
هذا هو المسار الموصى به للمستخدمين الذين لا يملكون VPS أو خبرة تقنية. AssetHub متوافق تمامًا مع باقة Hostinger Single Web Hosting الأرخص (~$2.99/شهر). لا SSH ولا Composer ولا سطر أوامر — تتضمّن Single cron jobs أصلية وPHP 8.3 وSSL مجاني.
الخطوة 1 — تجهيز الاستضافة
- سجّل الدخول إلى Hostinger hPanel.
- اذهب إلى الاستضافة ← إدارة لنطاقك.
- اضبط إصدار PHP إلى 8.2 أو 8.3 عبر المتقدّم ← إعدادات PHP.
- تأكّد من تفعيل ملحقات PHP التالية (عادةً مفعّلة افتراضيًا):
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
الخطوة 2 — إنشاء قاعدة بيانات MySQL
- في hPanel، اذهب إلى قواعد البيانات ← MySQL Databases.
- اضغط على إنشاء قاعدة بيانات جديدة.
- دوّن هذه القيم الثلاث:
اسم قاعدة البيانات— مثلًاu123_AssetHubاسم المستخدم— مثلًاu123_adminكلمة المرور— تُولَّد تلقائيًا، احتفظ بها بأمان
الخطوة 3 — رفع الملفات
- اذهب إلى الملفات ← File Manager في hPanel.
- انتقل إلى
public_html/(هذا هو جذر نطاقك). - احذف أي
index.htmlأوdefault.phpافتراضي في هذا المجلد. - اضغط على رفع الملفات وارفع
source.zipبأكمله من الحزمة.
أو ارفع محتويات مجلد/source/مباشرة عبر FTP إذا فضّلت. - إذا رفعت ZIP، انقر بالزر الأيمن ← استخراج. بعد الاستخراج، يجب أن تكون كل الملفات في جذر
public_html/. - تأكّد من أن
public_html/يحتوي على:app/،public/،vendor/،.htaccess،index.php(فيpublic/)،.env، إلخ.
.htaccess موجود في جذر public_html/. يحتوي على قواعد إعادة كتابة الـ URL. إذا كان File Manager يُخفي الملفات المخفية، اضغط على الإعدادات ← إظهار الملفات المخفية.
الخطوة 4 — تشغيل المثبّت
- افتح متصفحك واذهب إلى
https://yourdomain.com/install. - ستظهر شاشة AssetHub Installer.
- الخطوة 1: Requirements — يجب أن تنجح كل الفحوصات (خضراء). إذا فشل أيّ فحص، تواصل مع دعم Hostinger لتفعيل ملحق PHP المفقود.
- الخطوة 2: Database — أدخل بيانات الاعتماد من الخطوة 2 أعلاه:
- المضيف:
localhost - المنفذ:
3306 - قاعدة البيانات:
u123_AssetHub - اسم المستخدم:
u123_admin - كلمة المرور: (التي ولّدها Hostinger)
- المضيف:
- الخطوة 3: Migrate — اضغط على "Run Migrations & Seed". تستغرق ~10 ثوان. لا تُحدّث الصفحة.
- الخطوة 4: Admin — أنشئ حساب المسؤول. استخدم كلمة مرور قوية.
- تم! — سترى رابط Cron (احفظه!) وزر تسجيل الدخول.
الخطوة 5 — إعداد تنبيهات البريد التلقائية عبر Hostinger Cron
يستخدم AssetHub مجدّول Laravel لمهام الخلفية: تنبيهات الضمان، تذكيرات الصيانة، انتهاء الوثائق، تحديث الإهلاك، وعمليات الإخراج المتأخرة. اضبط cron job واحدًا في hPanel وسيقرّر Laravel أيّ مهمة تُنفَّذ ومتى.
- في hPanel، اذهب إلى المتقدّم ← Cron Jobs.
- اضغط على إنشاء Cron job.
- اختر النوع: Custom (وليس "PHP" — نحتاج إلى تمرير وسيط).
- للأمر، أدخل (استبدل
uXXXXXXباسم مستخدم حسابك في Hostinger):
نصيحة: افتح File Manager، حدّد ملف/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(جذر المشروع)، انقر بالزر الأيمن ← الخصائص لنسخ المسار الكامل. - اضبط الجدولة على كل دقيقة — كل الحقول الخمسة (الدقيقة، الساعة، اليوم، الشهر، يوم الأسبوع) على
*. - اضغط على حفظ.
هذا كل شيء — يرسل AssetHub الآن تلقائيًا تذكيرات عمليات الإخراج المتأخرة، وتنبيهات الصيانة، وتنبيهات انتهاء الوثائق، وتنبيهات الضمان، ويُحدّث قيم إهلاك الأصول. يجدول Laravel داخليًا كل مهمة بترددها الصحيح (يوميًا 08:00، شهريًا، إلخ).
public_html/public/؟ لا مشكلة — لا يزال كود Laravel في جذر public_html/، لذا يظل مسار cron /home/uXXXX/public_html/artisan (لا تُضِف /public/).
- سجّل الدخول كمسؤول ← الإعدادات ← تبويب النظام ← انسخ رابط Cron الخاص بك.
- سجّل مجانًا في cron-job.org.
- أنشئ cronjob، الصق الرابط، اضبطه على كل 15 دقيقة، احفظه.
الخطوة 6 — إعداد البريد (SMTP)
يوفّر Hostinger حسابات بريد مع كل باقة. لاستخدامها في إشعارات AssetHub:
- في hPanel، اذهب إلى البريد ← حسابات البريد وأنشئ حسابًا (مثلًا
noreply@yourdomain.com). - حرّر ملف
.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" - احفظ الملف.
- سجّل الدخول إلى AssetHub ← الإعدادات ← تبويب البريد ← إرسال بريد تجريبي. إذا استلمته فقد انتهيت.
المشكلات الشائعة على 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 لا يفتح الكاميرا
تتطلّب واجهات كاميرا المتصفح HTTPS. يوفّر Hostinger SSL مجاني عبر Let's Encrypt — فعّله في hPanel ضمن SSL ← إدارة.
رسائل البريد المجدولة لا تُرسَل
- في hPanel ← Cron Jobs ← تحقّق من عمود Last run في مدخل cron. إذا كان فارغًا فإن cron لا يعمل — تحقّق من صحة مسار artisan.
- اختبر الأمر يدويًا: افتح Terminal في hPanel (إن توفّر) ونفّذ أمر cron. إذا فشل، ستحدّد رسالة الخطأ المشكلة (إصدار PHP خاطئ، مسار خاطئ، إلخ).
- تحقّق من ضبط SMTP بشكل صحيح (الإعدادات ← البريد ← إرسال اختبار).
- افحص
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 في الإنتاج | false |
DB_* | تفاصيل اتصال قاعدة البيانات | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | مشغّل البريد | smtp, log, mailgun |
MAIL_HOST | اسم مضيف خادم SMTP | smtp.gmail.com |
MAIL_PORT | منفذ SMTP | 587 |
MAIL_USERNAME | اسم مستخدم SMTP | your@email.com |
MAIL_PASSWORD | كلمة مرور SMTP أو app token | ********** |
MAIL_FROM_ADDRESS | عنوان From الافتراضي | noreply@example.com |
الإعدادات داخل التطبيق
معظم الخيارات غير الحسّاسة قابلة للضبط من المسؤول ← الإعدادات:
- عام: اسم/بريد/هاتف الشركة، بادئة asset tag
- البريد: إرسال بريد تجريبي للتحقّق من SMTP
- الإشعارات: عتبات تنبيه الضمان، نافذة تذكير الصيانة
- التوطين: المنطقة الزمنية، تنسيق التاريخ، العملة
دعم متعدد اللغات
يأتي AssetHub مع 10 لغات جاهزة للاستخدام، بما في ذلك العربية RTL. يقوم المستخدمون بتبديل اللغة عبر قائمة الأعلام المنسدلة في الزاوية اليمنى العلوية.
اللغات المضمنة
| الرمز | اللغة | الاتجاه |
|---|---|---|
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 |
كيفية تبديل اللغة
- انقر على أيقونة العلم في الزاوية اليمنى العلوية لفتح القائمة المنسدلة.
- اختر لغتك من القائمة.
- يتم إعادة تحميل الصفحة؛ وتتبدل جميع تسميات الواجهة والتواريخ وتنسيقات العملة.
- يتم حفظ اختيارك في كل من حساب المستخدم وكوكي (سنة واحدة).
/locale/{code}، والذي يعمل فقط عند تشغيل خادم PHP. ادخل دائمًا عبر نطاقك الحقيقي (الإنتاج) أو http://localhost:8000 (التطوير مع php artisan serve). أما ملفات التوثيق مثل هذا فهي قائمة بذاتها تمامًا ويمكن فتحها مباشرة.
إضافة لغة مخصصة (المشرف)
المشرف → الإعدادات → الترجمات:
- انقر "إضافة لغة" — قدم رمزًا (مثل
thللتايلاندية)، اسم العرض، الاسم الأصلي، العلم، الاتجاه، ولغة أساس لنسخ الترجمات. - حرر الترجمات مباشرة في محرر الترجمات، أو عبر استيراد/تصدير CSV.
- الترجمات المخزنة في قاعدة البيانات تتجاوز تلقائيًا ترجمات الملفات.
اللغة الافتراضية لكل مستخدم
لكل مستخدم عمود locale. ترسل إشعارات البريد الإلكتروني تلقائيًا بلغة المستلم المفضلة بفضل عقد HasLocalePreference الخاص بـ Laravel.
قائمة الميزات
إدارة الأصول
- asset tag مُولَّدة تلقائيًا
- صور متعدّدة لكل أصل
- توليد رمز QR
- تتبّع الحالة والوضع
- استيراد/تصدير جماعي
- استنساخ أصل
سير العمل
- إسناد / إرجاع / نقل
- طلبات تتطلّب موافقة
- حجز Check-in / Check-out
- كشف التعارض
الصيانة
- جدولة وقائية/تصحيحية
- عرض تقويم
- جدولة تلقائية للتالية
- تتبّع التكاليف
- تذكيرات بالبريد
الوثائق
- إرفاق فواتير وأدلة
- معاينة inline
- تنبيهات الانتهاء
- أنواع وثائق متعدّدة
الإهلاك
- 3 طرق حساب
- تحديث القيمة تلقائيًا
- مخطّط جدولة
- ملخّص سنوي
التقارير
- 8 أنواع تقارير
- تصدير Excel + PDF
- مخطّطات ولوحات
- فلاتر التاريخ
المستخدمون والأدوار
يأتي AssetHub مع 5 أدوار جاهزة:
| الدور | الصلاحيات |
|---|---|
| Admin | وصول كامل للنظام — المستخدمون، الأقسام، الإعدادات، سجل التدقيق، Webhooks، الترجمات |
| مدير تقنية المعلومات | إدارة الأصول والفئات والصيانة والطلبات، الموافقة على عمليات النقل، عرض التقارير والإهلاك |
| محاسب | إدارة الأصول والإهلاك، إجراء الجرد، الموافقة على النقل، وصول كامل للتقارير (تركيز مالي) |
| مشرف | الموافقة على طلبات القسم، إدارة عمليات الإخراج، المشاركة في الجرد، عرض التقارير |
| موظّف | عرض الأصول المسنَدة، إنشاء طلبات، إدارة عمليات الإخراج الخاصة به |
تُخزَّن الصلاحيات كأدوار Spatie — يمكن للمسؤولين الضبط الدقيق لكل صلاحية عبر قاعدة البيانات.
إدارة الأصول
إنشاء الأصول
- انتقل إلى الأصول ← أصل جديد.
- املأ الاسم والفئة والعلامة التجارية والطراز والرقم التسلسلي.
- أضف تاريخ الشراء والسعر (مطلوب للإهلاك).
- ارفع الصور (يدعم ملفات متعدّدة، حد أقصى 5 ميغابايت لكل ملف).
- احفظ — يُولَّد asset tag ورمز QR تلقائيًا.
تنسيق Asset Tag
افتراضيًا: {PREFIX}-{YEAR}-{NNNN}، مثلًا AS-2026-0001. قابل للضبط عبر الإعدادات ← عام ← بادئة Asset Tag.
استيراد جماعي
- اضغط على استيراد في صفحة الأصول.
- نزّل قالب Excel.
- املأ بياناتك — الأعمدة المطلوبة:
name،category_name. - ارفع الملف.
رموز QR
يتلقّى كل أصل رمز QR تلقائيًا عند الإنشاء. يُرمِّز QR رابط الأصل، لذا يأخذ المسحُ المستخدمَ مباشرةً إلى صفحة تفاصيل الأصل.
طباعة البطاقات
- بطاقة واحدة: اضغط على أيقونة الطابعة في أيّ صف أصل.
- صيغة PDF: A4، بطاقتان لكل صف، تشمل asset tag والاسم والعلامة والرقم التسلسلي.
المسح
اضغط على مسح QR في صفحة الأصول. اسمح بصلاحية الكاميرا. يستخدم الماسح html5-qrcode ويعمل على أيّ متصفح حديث. ملاحظة: يتطلّب الوصول إلى الكاميرا HTTPS أو localhost.
سير العمل
إسناد الأصل
- افتح صفحة تفاصيل أصل.
- اضغط على إسناد (يظهر إذا كان الأصل متاحًا).
- اختر المستخدم وتاريخ الإرجاع الاختياري والملاحظات.
- أرسل — تُنشأ المعاملة ويُرسَل إشعار البريد.
طلبات الأصول
يمكن للموظفين تقديم طلبات للأصول التي يحتاجونها. للطلبات 4 حالات: pending ← approved ← fulfilled، أو rejected. تُرسَل رسائل الموافقة تلقائيًا.
Check-in / Check-out
للأصول المشتركة (الكاميرات، أجهزة العرض، المركبات). للحجوزات نطاقات تواريخ؛ يمنع النظام تداخل عمليات الإخراج. يُظهر عرض التقويم كل الحجوزات في لمحة.
الإهلاك
يحسب AssetHub إهلاك الأصول بواحدة من ثلاث طرق:
| الطريقة | الصيغة | الحالة |
|---|---|---|
| القسط الثابت | (Cost - Salvage) / Useful Life | الأكثر شيوعًا، إهلاك سنوي متساوٍ |
| الرصيد المتناقص | 2 / Useful Life × Book Value | متسارع، لأغراض ضريبية |
| وحدات الإنتاج | حسب الاستخدام | معدات التصنيع |
تُرث الإعدادات الافتراضية من فئة الأصل. تُولَّد إدخالات الجدول شهريًا. تُحدَّث current_value للأصل تلقائيًا في أول كل شهر.
الحقول المخصصة
المسؤول ← الحقول المخصصة يتيح لك إضافة سمات مخصّصة بلا حدود للأصول:
- الأنواع: نص، رقم، تاريخ، اختيار (dropdown)، منطقة نص، ملف، مربع اختيار
- النطاق: تطبيق على كل الفئات أو فئة محدّدة
- إعادة الترتيب: اسحب المقبض
- يتم التحقّق من الحقول الإلزامية عند حفظ الأصل
التقارير
ثمانية تقارير مدمجة يمكن الوصول إليها من قائمة التقارير:
- ملخّص الأصول — الإجماليات حسب الحالة والوضع والفئة والقسم
- الإهلاك — فقد القيمة لكل فئة، أكثر الأصول إهلاكًا
- المعاملات — نشاط الإسناد والإرجاع والنقل عبر الزمن
- تكلفة الصيانة — الإنفاق حسب الشهر والفئة والنوع
- انتهاء الضمان — الأصول التي تحتاج اهتمامًا خلال 30/60/180 يومًا
- أصول الأقسام — توزيع الأصول واستخدام الميزانية حسب القسم
- الأصول حسب المصدر — التوزيع بين الشراء والمشروع والتبرّع والنقل
- ملخّص جرد المخزون — الفروقات بين دورات الجرد الدورية
تدعم كل التقارير التصدير إلى Excel وPDF عبر أزرار في رأس الصفحة.
Webhooks
يمكن لـ AssetHub إخطار الخدمات الخارجية عند الأحداث الرئيسية.
الأحداث المتاحة
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
صيغة 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 للـ payload body. تحقّق في طرفك:
$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
// صالح
}
سياسة إعادة المحاولة
يُعاد التسليم 3 مرات بفاصل 200 مللي ثانية عند الفشل. بعد 10 إخفاقات متتالية، يُعطَّل webhook تلقائيًا.
المهام المجدولة
يستخدم AssetHub مجدّول Laravel لمهام الخلفية. تحتاج فقط إلى مدخل cron واحد — يُوزّع Laravel داخليًا كل مهمة على الوقت الصحيح.
Hostinger / استضافة مشتركة (واجهة 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
حلّ بديل: pinger URL خارجي
إذا لم يكن لدى مضيفك cron على الإطلاق، استخدم رابط Cron داخل التطبيق (الإعدادات ← تبويب النظام) مع cron-job.org (مجاني، كل 15 دقيقة).
المهام التي تعمل تلقائيًا
| الوقت | الأمر | الغرض |
|---|---|---|
| يوميًا 08:00 | send-overdue-checkout-alerts | تذكيرات بريد لعمليات الإخراج المتأخرة |
| يوميًا 08:30 | send-maintenance-reminders | تذكيرات الصيانة القادمة |
| يوميًا 09:00 | send-document-expiry-alerts | الوثائق التي تنتهي خلال 30/14/7/1 أيام |
| يوميًا 09:30 | send-warranty-alerts | تنبيهات انتهاء الضمان + التأمين |
| يوميًا 10:00 | assethub:send-depreciation-end-alerts | تنبيهات عند بلوغ الأصول نهاية العمر الإنتاجي |
| يوميًا 10:30 | send-inventory-audit-reminders | تذكيرات الجرد النشطة |
| شهريًا في الأول 02:00 | update-asset-values | تحديث current_value الأصل من الإهلاك |
حل المشكلات
"Permission denied" على storage
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
ماسح QR لا يفتح الكاميرا
تتطلّب واجهات كاميرا المتصفح HTTPS. ثبّت شهادة SSL أو استخدم localhost للاختبار.
البريد لا يصل
افحص storage/logs/laravel.log بحثًا عن أخطاء. استخدم الإعدادات ← البريد ← إرسال بريد تجريبي للتحقّق من بيانات SMTP. تأكّد من أن خادم SMTP يسمح لـ IP المرسِل.
إعادة ضبط التثبيت
احذف storage/installed.lock وزر /install مجدّدًا. سيتم محو البيانات الموجودة إذا أعدت تشغيل الـ migrations.
الأداء — قائمة أصول بطيئة
نفّذ php artisan optimize لتخزين الإعدادات والمسارات والـ views مؤقتًا. تأكّد من وجود فهارس MySQL على assets.asset_tag، assets.serial_number، assets.status (تُنشأ تلقائيًا بواسطة الـ migrations).
سجل التغييرات
v1.0.0 — الإصدار الأول (2026-05)
- CRUD الأصول مع توليد QR تلقائيًا
- 5 أدوار مستخدمين (Admin، مدير IT، محاسب، مشرف، موظف) بصلاحيات دقيقة
- تتبّع مصدر الأصل (شراء مركزي، شراء لامركزي، مشروع استثماري، تبرّع، نقل داخلي)
- سير عمل الإسناد والإرجاع مع إشعارات بالبريد
- سير عمل الموافقة على النقل (pending ← approved/rejected) مع بوّابة الصلاحيات
- سير الموافقة على طلبات الأصول
- Check-in/check-out مع عرض التقويم
- جدولة الصيانة مع التجديد التلقائي
- مرفقات الوثائق مع تنبيهات الانتهاء
- الإهلاك بـ 3 طرق حساب + تنبيهات نهاية العمر
- وحدة جرد المخزون — جرد دوري مع تتبّع الفروقات
- الحقول المخصصة بـ 7 أنواع إدخال وفرز drag-drop
- 8 تقارير مع مخطّطات وتصدير Excel وPDF (تشمل الأصول حسب المصدر، ملخّص الجرد)
- سجل تدقيق عبر Spatie Activitylog مع عارض diff
- Webhooks مع توقيع HMAC وإعادة محاولة تلقائية
- واجهة متعدّدة اللغات: 10 لغات (en، vi، es، fr، de، zh، ja، pt-BR، ru، ar مع RTL)
- واجهة إعدادات للشركة والبريد والإشعارات والتوطين والترجمات
- معالج تثبيت قائم على الويب
- وضع داكن بلوحة ألوان emerald-teal
الاعتمادات
المكتبات مفتوحة المصدر المستخدمة
- 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