Spaces:
Running
Running
| <html lang="ar" dir="rtl"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>نظام إدارة بيانات العمال الأجانب - زهرة كركوك</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| @import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap'); | |
| body { | |
| font-family: 'Tajawal', sans-serif; | |
| } | |
| .sidebar { | |
| transition: all 0.3s ease; | |
| } | |
| .sidebar.collapsed { | |
| width: 70px; | |
| } | |
| .sidebar.collapsed .sidebar-text { | |
| display: none; | |
| } | |
| .notification-badge { | |
| position: absolute; | |
| top: -5px; | |
| right: -5px; | |
| font-size: 10px; | |
| background-color: #ef4444; | |
| } | |
| .document-expiry-warning { | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); } | |
| 70% { box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); } | |
| 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); } | |
| } | |
| .file-upload input[type="file"] { | |
| display: none; | |
| } | |
| .file-upload-label { | |
| cursor: pointer; | |
| transition: all 0.3s ease; | |
| } | |
| .file-upload-label:hover { | |
| background-color: #e5e7eb; | |
| } | |
| .worker-photo { | |
| width: 120px; | |
| height: 120px; | |
| object-fit: cover; | |
| } | |
| .document-thumbnail { | |
| width: 80px; | |
| height: 80px; | |
| object-fit: cover; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-100"> | |
| <div class="flex h-screen overflow-hidden"> | |
| <!-- Sidebar --> | |
| <div class="sidebar bg-blue-800 text-white w-64 flex flex-col"> | |
| <div class="p-4 flex items-center justify-between border-b border-blue-700"> | |
| <div class="flex items-center"> | |
| <img src="https://via.placeholder.com/40" alt="Logo" class="h-8 w-8 rounded-full"> | |
| <span class="sidebar-text mr-2 font-bold text-lg">زهرة كركوك</span> | |
| </div> | |
| <button id="toggleSidebar" class="text-white focus:outline-none"> | |
| <i class="fas fa-bars"></i> | |
| </button> | |
| </div> | |
| <div class="flex-1 overflow-y-auto"> | |
| <nav class="p-2"> | |
| <a href="#" class="flex items-center p-3 rounded-lg bg-blue-700 mb-1 sidebar-link" data-section="dashboardSection"> | |
| <i class="fas fa-home"></i> | |
| <span class="sidebar-text mr-3">الرئيسية</span> | |
| </a> | |
| <a href="#" class="flex items-center p-3 rounded-lg hover:bg-blue-700 mb-1 sidebar-link" data-section="workersSection"> | |
| <i class="fas fa-users"></i> | |
| <span class="sidebar-text mr-3">إدارة العمال</span> | |
| </a> | |
| <a href="#" class="flex items-center p-3 rounded-lg hover:bg-blue-700 mb-1 sidebar-link" data-section="documentsSection"> | |
| <i class="fas fa-file-alt"></i> | |
| <span class="sidebar-text mr-3">المستندات</span> | |
| </a> | |
| <a href="#" class="flex items-center p-3 rounded-lg hover:bg-blue-700 mb-1 sidebar-link relative" data-section="notificationsSection"> | |
| <i class="fas fa-bell"></i> | |
| <span class="sidebar-text mr-3">التنبيهات</span> | |
| <span class="notification-badge rounded-full h-5 w-5 flex items-center justify-center" id="notificationCount">3</span> | |
| </a> | |
| <a href="#" class="flex items-center p-3 rounded-lg hover:bg-blue-700 mb-1 sidebar-link" data-section="reportsSection"> | |
| <i class="fas fa-chart-bar"></i> | |
| <span class="sidebar-text mr-3">التقارير</span> | |
| </a> | |
| <a href="#" class="flex items-center p-3 rounded-lg hover:bg-blue-700 mb-1 sidebar-link" data-section="settingsSection"> | |
| <i class="fas fa-cog"></i> | |
| <span class="sidebar-text mr-3">الإعدادات</span> | |
| </a> | |
| </nav> | |
| </div> | |
| <div class="p-4 border-t border-blue-700"> | |
| <div class="flex items-center"> | |
| <img src="https://via.placeholder.com/40" alt="User" class="h-10 w-10 rounded-full"> | |
| <div class="sidebar-text mr-3"> | |
| <div class="font-medium">مدير النظام</div> | |
| <div class="text-sm text-blue-200">admin@zahrakirkuk.com</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Main Content --> | |
| <div class="flex-1 overflow-auto"> | |
| <!-- Top Navigation --> | |
| <header class="bg-white shadow-sm"> | |
| <div class="flex justify-between items-center p-4"> | |
| <h1 class="text-xl font-bold text-gray-800" id="pageTitle">نظام إدارة بيانات العمال الأجانب</h1> | |
| <div class="flex items-center space-x-4"> | |
| <div class="relative"> | |
| <input type="text" placeholder="بحث..." class="border border-gray-300 rounded-lg py-2 px-4 pr-10 focus:outline-none focus:ring-2 focus:ring-blue-500" id="searchInput"> | |
| <i class="fas fa-search absolute right-3 top-3 text-gray-400"></i> | |
| </div> | |
| <button class="text-gray-600 hover:text-gray-800 relative" id="notificationButton"> | |
| <i class="fas fa-bell text-xl"></i> | |
| <span class="notification-badge rounded-full h-5 w-5 flex items-center justify-center" id="mobileNotificationCount">3</span> | |
| </button> | |
| <div class="h-8 w-8 rounded-full bg-blue-100 flex items-center justify-center"> | |
| <i class="fas fa-user text-blue-600"></i> | |
| </div> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Content Sections --> | |
| <main class="p-6"> | |
| <!-- Dashboard Section --> | |
| <div id="dashboardSection"> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-6"> | |
| <div class="bg-white p-6 rounded-lg shadow-md"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500">إجمالي العمال</p> | |
| <h3 class="text-2xl font-bold" id="totalWorkers">0</h3> | |
| </div> | |
| <div class="bg-blue-100 p-3 rounded-full"> | |
| <i class="fas fa-users text-blue-600 text-xl"></i> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white p-6 rounded-lg shadow-md"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500">جوازات منتهية</p> | |
| <h3 class="text-2xl font-bold" id="expiredPassports">0</h3> | |
| </div> | |
| <div class="bg-red-100 p-3 rounded-full"> | |
| <i class="fas fa-passport text-red-600 text-xl"></i> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white p-6 rounded-lg shadow-md"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500">إقامات منتهية</p> | |
| <h3 class="text-2xl font-bold" id="expiredResidences">0</h3> | |
| </div> | |
| <div class="bg-yellow-100 p-3 rounded-full"> | |
| <i class="fas fa-id-card text-yellow-600 text-xl"></i> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white p-6 rounded-lg shadow-md"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500">بطاقات عمل منتهية</p> | |
| <h3 class="text-2xl font-bold" id="expiredWorkCards">0</h3> | |
| </div> | |
| <div class="bg-purple-100 p-3 rounded-full"> | |
| <i class="fas fa-id-badge text-purple-600 text-xl"></i> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-lg font-semibold text-gray-700">التنبيهات القريبة</h3> | |
| <a href="#" class="text-blue-600 hover:text-blue-800" id="viewAllAlerts">عرض الكل</a> | |
| </div> | |
| <div class="space-y-3" id="recentAlerts"> | |
| <!-- Alerts will be loaded here via AJAX --> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700">أحدث العمال المسجلين</h3> | |
| <div class="overflow-x-auto"> | |
| <table class="min-w-full divide-y divide-gray-200"> | |
| <thead class="bg-gray-50"> | |
| <tr> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">اسم العامل</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">الجنسية</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">رقم الجواز</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">تاريخ انتهاء الجواز</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">حالة الجواز</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">إجراءات</th> | |
| </tr> | |
| </thead> | |
| <tbody class="bg-white divide-y divide-gray-200" id="recentWorkersTable"> | |
| <!-- Recent workers will be loaded here via AJAX --> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Workers Management Section --> | |
| <div id="workersSection" class="hidden"> | |
| <div class="mb-6 flex justify-between items-center"> | |
| <h2 class="text-2xl font-bold text-gray-800">إدارة العمال الأجانب</h2> | |
| <button class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-lg flex items-center" id="addWorkerBtn"> | |
| <i class="fas fa-plus ml-2"></i> | |
| <span>إضافة عامل جديد</span> | |
| </button> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <div class="flex flex-col md:flex-row md:items-center md:justify-between mb-4"> | |
| <div class="mb-4 md:mb-0"> | |
| <label for="workerFilter" class="block text-gray-700 mb-2">تصفية حسب:</label> | |
| <select id="workerFilter" class="border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| <option value="all">جميع العمال</option> | |
| <option value="expiring">وثائق قريبة الانتهاء</option> | |
| <option value="expired">وثائق منتهية</option> | |
| <option value="active">وثائق سارية</option> | |
| </select> | |
| </div> | |
| <div class="relative"> | |
| <input type="text" placeholder="بحث عن عامل..." class="border border-gray-300 rounded-lg py-2 px-4 pr-10 focus:outline-none focus:ring-2 focus:ring-blue-500" id="workerSearch"> | |
| <i class="fas fa-search absolute right-3 top-3 text-gray-400"></i> | |
| </div> | |
| </div> | |
| <div class="overflow-x-auto"> | |
| <table class="min-w-full divide-y divide-gray-200"> | |
| <thead class="bg-gray-50"> | |
| <tr> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">الصورة</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">اسم العامل</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">الجنسية</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">حالة الجواز</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">حالة الإقامة</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">حالة بطاقة العمل</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">إجراءات</th> | |
| </tr> | |
| </thead> | |
| <tbody class="bg-white divide-y divide-gray-200" id="workersTable"> | |
| <!-- Workers will be loaded here via AJAX --> | |
| </tbody> | |
| </table> | |
| </div> | |
| <div class="flex items-center justify-between mt-4"> | |
| <div class="text-sm text-gray-500"> | |
| عرض <span id="workersStart">1</span> إلى <span id="workersEnd">10</span> من <span id="workersTotal">0</span> عامل | |
| </div> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 border rounded-md text-gray-700 bg-white" id="workersPrevPage"> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| <button class="px-3 py-1 border rounded-md text-gray-700 bg-white" id="workersNextPage"> | |
| <i class="fas fa-chevron-left"></i> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Add/Edit Worker Section --> | |
| <div id="workerFormSection" class="hidden"> | |
| <div class="mb-6 flex justify-between items-center"> | |
| <h2 class="text-2xl font-bold text-gray-800" id="formTitle">إضافة عامل جديد</h2> | |
| <button class="bg-gray-500 hover:bg-gray-600 text-white py-2 px-4 rounded-lg flex items-center" id="backToWorkersBtn"> | |
| <i class="fas fa-arrow-left ml-2"></i> | |
| <span>العودة إلى القائمة</span> | |
| </button> | |
| </div> | |
| <form id="workerForm" class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <input type="hidden" id="workerId"> | |
| <div class="flex flex-col md:flex-row gap-6 mb-6"> | |
| <div class="md:w-1/4 flex flex-col items-center"> | |
| <div class="mb-4"> | |
| <img id="workerPhotoPreview" src="https://via.placeholder.com/150" alt="Worker Photo" class="worker-photo rounded-lg mb-2"> | |
| </div> | |
| <div class="file-upload w-full"> | |
| <label for="workerPhoto" class="file-upload-label border-2 border-dashed border-gray-300 rounded-lg p-4 flex flex-col items-center justify-center"> | |
| <i class="fas fa-camera text-3xl text-gray-400 mb-2"></i> | |
| <span class="text-gray-500">اضغط لرفع صورة العامل</span> | |
| <span class="text-sm text-gray-400">(JPG, PNG)</span> | |
| <input type="file" id="workerPhoto" accept=".jpg,.jpeg,.png"> | |
| </label> | |
| </div> | |
| </div> | |
| <div class="md:w-3/4"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">البيانات الشخصية</h3> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
| <div> | |
| <label for="workerName" class="block text-gray-700 mb-2">اسم العامل</label> | |
| <input type="text" id="workerName" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="workerNationality" class="block text-gray-700 mb-2">الجنسية</label> | |
| <select id="workerNationality" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| <option value="">اختر الجنسية</option> | |
| <option value="الهند">الهند</option> | |
| <option value="بنغلاديش">بنغلاديش</option> | |
| <option value="باكستان">باكستان</option> | |
| <option value="نيبال">نيبال</option> | |
| <option value="سريلانكا">سريلانكا</option> | |
| <option value="الفلبين">الفلبين</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label for="workerBirthDate" class="block text-gray-700 mb-2">تاريخ الميلاد</label> | |
| <input type="date" id="workerBirthDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| <div> | |
| <label for="workerPhone" class="block text-gray-700 mb-2">رقم الهاتف</label> | |
| <input type="tel" id="workerPhone" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| <div> | |
| <label for="workerEmail" class="block text-gray-700 mb-2">البريد الإلكتروني</label> | |
| <input type="email" id="workerEmail" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| <div> | |
| <label for="workerAddress" class="block text-gray-700 mb-2">العنوان</label> | |
| <input type="text" id="workerAddress" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">بيانات الجواز</h3> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
| <div> | |
| <label for="passportNumber" class="block text-gray-700 mb-2">رقم الجواز</label> | |
| <input type="text" id="passportNumber" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="passportIssueDate" class="block text-gray-700 mb-2">تاريخ إصدار الجواز</label> | |
| <input type="date" id="passportIssueDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="passportExpiryDate" class="block text-gray-700 mb-2">تاريخ انتهاء الجواز</label> | |
| <input type="date" id="passportExpiryDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div class="md:col-span-3"> | |
| <label class="block text-gray-700 mb-2">صورة الجواز</label> | |
| <div class="flex flex-wrap gap-4" id="passportImagesContainer"> | |
| <!-- Passport images will be added here --> | |
| </div> | |
| <div class="file-upload mt-2"> | |
| <label for="passportImage" class="file-upload-label border-2 border-dashed border-gray-300 rounded-lg p-4 flex flex-col items-center justify-center"> | |
| <i class="fas fa-cloud-upload-alt text-3xl text-gray-400 mb-2"></i> | |
| <span class="text-gray-500">اضغط لرفع صورة الجواز</span> | |
| <span class="text-sm text-gray-400">(PDF, JPG, PNG)</span> | |
| <input type="file" id="passportImage" accept=".pdf,.jpg,.jpeg,.png" multiple> | |
| </label> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">بيانات الإقامة</h3> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
| <div> | |
| <label for="residenceNumber" class="block text-gray-700 mb-2">رقم إقامة العمل</label> | |
| <input type="text" id="workerResidenceNumber" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="residenceIssueDate" class="block text-gray-700 mb-2">تاريخ إصدار الإقامة</label> | |
| <input type="date" id="workerResidenceIssueDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="residenceExpiryDate" class="block text-gray-700 mb-2">تاريخ انتهاء الإقامة</label> | |
| <input type="date" id="workerResidenceExpiryDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div class="md:col-span-3"> | |
| <label class="block text-gray-700 mb-2">صورة الإقامة</label> | |
| <div class="flex flex-wrap gap-4" id="residenceImagesContainer"> | |
| <!-- Residence images will be added here --> | |
| </div> | |
| <div class="file-upload mt-2"> | |
| <label for="residenceImage" class="file-upload-label border-2 border-dashed border-gray-300 rounded-lg p-4 flex flex-col items-center justify-center"> | |
| <i class="fas fa-cloud-upload-alt text-3xl text-gray-400 mb-2"></i> | |
| <span class="text-gray-500">اضغط لرفع صورة الإقامة</span> | |
| <span class="text-sm text-gray-400">(PDF, JPG, PNG)</span> | |
| <input type="file" id="residenceImage" accept=".pdf,.jpg,.jpeg,.png" multiple> | |
| </label> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">بيانات العمل</h3> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
| <div> | |
| <label for="workCardNumber" class="block text-gray-700 mb-2">رقم بطاقة العمل</label> | |
| <input type="text" id="workerWorkCardNumber" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="workCardIssueDate" class="block text-gray-700 mb-2">تاريخ إصدار بطاقة العمل</label> | |
| <input type="date" id="workerWorkCardIssueDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="workCardExpiryDate" class="block text-gray-700 mb-2">تاريخ انتهاء بطاقة العمل</label> | |
| <input type="date" id="workerWorkCardExpiryDate" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" required> | |
| </div> | |
| <div> | |
| <label for="arrivalAirport" class="block text-gray-700 mb-2">مطار الوصول</label> | |
| <input type="text" id="workerArrivalAirport" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| <div> | |
| <label for="workType" class="block text-gray-700 mb-2">آلية العمل</label> | |
| <select id="workerWorkType" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| <option value="">اختر آلية العمل</option> | |
| <option value="دوام كامل">دوام كامل</option> | |
| <option value="دوام جزئي">دوام جزئي</option> | |
| <option value="عقد مؤقت">عقد مؤقت</option> | |
| </select> | |
| </div> | |
| <div class="md:col-span-3"> | |
| <label class="block text-gray-700 mb-2">صورة بطاقة العمل</label> | |
| <div class="flex flex-wrap gap-4" id="workCardImagesContainer"> | |
| <!-- Work card images will be added here --> | |
| </div> | |
| <div class="file-upload mt-2"> | |
| <label for="workCardImage" class="file-upload-label border-2 border-dashed border-gray-300 rounded-lg p-4 flex flex-col items-center justify-center"> | |
| <i class="fas fa-cloud-upload-alt text-3xl text-gray-400 mb-2"></i> | |
| <span class="text-gray-500">اضغط لرفع صورة بطاقة العمل</span> | |
| <span class="text-sm text-gray-400">(PDF, JPG, PNG)</span> | |
| <input type="file" id="workCardImage" accept=".pdf,.jpg,.jpeg,.png" multiple> | |
| </label> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">إعدادات التنبيهات</h3> | |
| <div class="space-y-4"> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="passportAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="passportAlert" class="mr-2 block text-gray-700">تنبيه قبل انتهاء الجواز بشهر</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="residenceAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="residenceAlert" class="mr-2 block text-gray-700">تنبيه قبل انتهاء الإقامة بشهر</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="workCardAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="workCardAlert" class="mr-2 block text-gray-700">تنبيه قبل انتهاء بطاقة العمل بشهر</label> | |
| </div> | |
| <div class="pt-4 border-t border-gray-200"> | |
| <label class="block text-gray-700 mb-2">طريقة إرسال التنبيهات</label> | |
| <div class="space-y-2"> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="emailAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="emailAlert" class="mr-2 block text-gray-700">البريد الإلكتروني</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="smsAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"> | |
| <label for="smsAlert" class="mr-2 block text-gray-700">رسالة SMS</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="appAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="appAlert" class="mr-2 block text-gray-700">إشعار داخل التطبيق</label> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="mt-6 flex justify-end space-x-4"> | |
| <button type="button" class="bg-gray-500 hover:bg-gray-600 text-white py-2 px-6 rounded-lg" id="cancelWorkerBtn"> | |
| إلغاء | |
| </button> | |
| <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-6 rounded-lg"> | |
| حفظ البيانات | |
| </button> | |
| </div> | |
| </form> | |
| </div> | |
| <!-- Documents Section --> | |
| <div id="documentsSection" class="hidden"> | |
| <div class="mb-6 flex justify-between items-center"> | |
| <h2 class="text-2xl font-bold text-gray-800">إدارة المستندات</h2> | |
| <div class="flex space-x-4"> | |
| <button class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-lg flex items-center" id="exportDocumentsBtn"> | |
| <i class="fas fa-file-export ml-2"></i> | |
| <span>تصدير المستندات</span> | |
| </button> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <div class="flex flex-col md:flex-row md:items-center md:justify-between mb-4"> | |
| <div class="mb-4 md:mb-0"> | |
| <label for="documentFilter" class="block text-gray-700 mb-2">تصفية حسب نوع المستند:</label> | |
| <select id="documentFilter" class="border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| <option value="all">جميع المستندات</option> | |
| <option value="passport">جوازات السفر</option> | |
| <option value="residence">إقامات العمل</option> | |
| <option value="workCard">بطاقات العمل</option> | |
| </select> | |
| </div> | |
| <div class="relative"> | |
| <input type="text" placeholder="بحث في المستندات..." class="border border-gray-300 rounded-lg py-2 px-4 pr-10 focus:outline-none focus:ring-2 focus:ring-blue-500" id="documentSearch"> | |
| <i class="fas fa-search absolute right-3 top-3 text-gray-400"></i> | |
| </div> | |
| </div> | |
| <div class="overflow-x-auto"> | |
| <table class="min-w-full divide-y divide-gray-200"> | |
| <thead class="bg-gray-50"> | |
| <tr> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">نوع المستند</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">اسم العامل</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">رقم المستند</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">تاريخ الانتهاء</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">الحالة</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">المستند</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">إجراءات</th> | |
| </tr> | |
| </thead> | |
| <tbody class="bg-white divide-y divide-gray-200" id="documentsTable"> | |
| <!-- Documents will be loaded here via AJAX --> | |
| </tbody> | |
| </table> | |
| </div> | |
| <div class="flex items-center justify-between mt-4"> | |
| <div class="text-sm text-gray-500"> | |
| عرض <span id="documentsStart">1</span> إلى <span id="documentsEnd">10</span> من <span id="documentsTotal">0</span> مستند | |
| </div> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 border rounded-md text-gray-700 bg-white" id="documentsPrevPage"> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| <button class="px-3 py-1 border rounded-md text-gray-700 bg-white" id="documentsNextPage"> | |
| <i class="fas fa-chevron-left"></i> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Notifications Section --> | |
| <div id="notificationsSection" class="hidden"> | |
| <div class="mb-6 flex justify-between items-center"> | |
| <h2 class="text-2xl font-bold text-gray-800">إدارة التنبيهات</h2> | |
| <div class="flex space-x-4"> | |
| <button class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-lg flex items-center" id="markAllAsReadBtn"> | |
| <i class="fas fa-check-circle ml-2"></i> | |
| <span>تعيين الكل كمقروء</span> | |
| </button> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <div class="flex flex-col md:flex-row md:items-center md:justify-between mb-4"> | |
| <div class="mb-4 md:mb-0"> | |
| <label for="notificationFilter" class="block text-gray-700 mb-2">تصفية حسب نوع التنبيه:</label> | |
| <select id="notificationFilter" class="border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| <option value="all">جميع التنبيهات</option> | |
| <option value="passport">جوازات السفر</option> | |
| <option value="residence">إقامات العمل</option> | |
| <option value="workCard">بطاقات العمل</option> | |
| <option value="unread">غير مقروء</option> | |
| <option value="read">مقروء</option> | |
| </select> | |
| </div> | |
| <div class="relative"> | |
| <input type="text" placeholder="بحث في التنبيهات..." class="border border-gray-300 rounded-lg py-2 px-4 pr-10 focus:outline-none focus:ring-2 focus:ring-blue-500" id="notificationSearch"> | |
| <i class="fas fa-search absolute right-3 top-3 text-gray-400"></i> | |
| </div> | |
| </div> | |
| <div class="space-y-3" id="notificationsList"> | |
| <!-- Notifications will be loaded here via AJAX --> | |
| </div> | |
| <div class="flex items-center justify-between mt-4"> | |
| <div class="text-sm text-gray-500"> | |
| عرض <span id="notificationsStart">1</span> إلى <span id="notificationsEnd">10</span> من <span id="notificationsTotal">0</span> تنبيه | |
| </div> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 border rounded-md text-gray-700 bg-white" id="notificationsPrevPage"> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| <button class="px-3 py-1 border rounded-md text-gray-700 bg-white" id="notificationsNextPage"> | |
| <i class="fas fa-chevron-left"></i> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Reports Section --> | |
| <div id="reportsSection" class="hidden"> | |
| <div class="mb-6 flex justify-between items-center"> | |
| <h2 class="text-2xl font-bold text-gray-800">التقارير والإحصائيات</h2> | |
| <div class="flex space-x-4"> | |
| <button class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-lg flex items-center" id="generateReportBtn"> | |
| <i class="fas fa-file-pdf ml-2"></i> | |
| <span>تصدير تقرير</span> | |
| </button> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6"> | |
| <div class="bg-white p-6 rounded-lg shadow-md"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700">توزيع العمال حسب الجنسية</h3> | |
| <div class="h-64 flex items-center justify-center" id="nationalityChart"> | |
| <!-- Chart will be loaded here via AJAX --> | |
| </div> | |
| </div> | |
| <div class="bg-white p-6 rounded-lg shadow-md"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700">حالة الوثائق</h3> | |
| <div class="h-64 flex items-center justify-center" id="documentsStatusChart"> | |
| <!-- Chart will be loaded here via AJAX --> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700">الوثائق القريبة من الانتهاء</h3> | |
| <div class="overflow-x-auto"> | |
| <table class="min-w-full divide-y divide-gray-200"> | |
| <thead class="bg-gray-50"> | |
| <tr> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">نوع الوثيقة</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">اسم العامل</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">رقم الوثيقة</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">تاريخ الانتهاء</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">الأيام المتبقية</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">إجراءات</th> | |
| </tr> | |
| </thead> | |
| <tbody class="bg-white divide-y divide-gray-200" id="expiringDocumentsTable"> | |
| <!-- Expiring documents will be loaded here via AJAX --> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700">إحصائيات الوثائق المنتهية</h3> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6"> | |
| <div class="bg-blue-50 p-4 rounded-lg"> | |
| <h4 class="text-lg font-medium text-blue-800 mb-2">جوازات السفر المنتهية</h4> | |
| <div class="flex justify-between items-center"> | |
| <span class="text-3xl font-bold" id="expiredPassportsCount">0</span> | |
| <i class="fas fa-passport text-blue-500 text-4xl"></i> | |
| </div> | |
| </div> | |
| <div class="bg-yellow-50 p-4 rounded-lg"> | |
| <h4 class="text-lg font-medium text-yellow-800 mb-2">إقامات العمل المنتهية</h4> | |
| <div class="flex justify-between items-center"> | |
| <span class="text-3xl font-bold" id="expiredResidencesCount">0</span> | |
| <i class="fas fa-id-card text-yellow-500 text-4xl"></i> | |
| </div> | |
| </div> | |
| <div class="bg-purple-50 p-4 rounded-lg"> | |
| <h4 class="text-lg font-medium text-purple-800 mb-2">بطاقات العمل المنتهية</h4> | |
| <div class="flex justify-between items-center"> | |
| <span class="text-3xl font-bold" id="expiredWorkCardsCount">0</span> | |
| <i class="fas fa-id-badge text-purple-500 text-4xl"></i> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Settings Section --> | |
| <div id="settingsSection" class="hidden"> | |
| <div class="mb-6"> | |
| <h2 class="text-2xl font-bold text-gray-800">إعدادات النظام</h2> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 mb-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">إعدادات التنبيهات</h3> | |
| <form id="alertSettingsForm"> | |
| <div class="space-y-4"> | |
| <div> | |
| <label class="block text-gray-700 mb-2">إعدادات التنبيه قبل انتهاء الوثائق</label> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-4"> | |
| <div> | |
| <label for="passportAlertDays" class="block text-gray-700 mb-1">جواز السفر (أيام)</label> | |
| <input type="number" id="passportAlertDays" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" value="30"> | |
| </div> | |
| <div> | |
| <label for="residenceAlertDays" class="block text-gray-700 mb-1">إقامة العمل (أيام)</label> | |
| <input type="number" id="residenceAlertDays" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" value="30"> | |
| </div> | |
| <div> | |
| <label for="workCardAlertDays" class="block text-gray-700 mb-1">بطاقة العمل (أيام)</label> | |
| <input type="number" id="workCardAlertDays" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" value="30"> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="pt-4 border-t border-gray-200"> | |
| <label class="block text-gray-700 mb-2">طرق إرسال التنبيهات</label> | |
| <div class="space-y-2"> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="systemEmailAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="systemEmailAlert" class="mr-2 block text-gray-700">البريد الإلكتروني</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="systemSmsAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"> | |
| <label for="systemSmsAlert" class="mr-2 block text-gray-700">رسالة SMS</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="systemAppAlert" class="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" checked> | |
| <label for="systemAppAlert" class="mr-2 block text-gray-700">إشعار داخل التطبيق</label> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="pt-4 border-t border-gray-200"> | |
| <label for="adminEmail" class="block text-gray-700 mb-2">البريد الإلكتروني للمسؤول</label> | |
| <input type="email" id="adminEmail" class="w-full border border-gray-300 rounded-lg py-2 px-4 focus:outline-none focus:ring-2 focus:ring-blue-500" value="admin@zahrakirkuk.com"> | |
| </div> | |
| </div> | |
| <div class="mt-6 flex justify-end"> | |
| <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-6 rounded-lg"> | |
| حفظ الإعدادات | |
| </button> | |
| </div> | |
| </form> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-lg font-semibold mb-4 text-gray-700 border-b pb-2">نسخة احتياطية للنظام</h3> | |
| <div class="space-y-4"> | |
| <div class="flex flex-col md:flex-row md:items-center md:space-x-4 space-y-4 md:space-y-0"> | |
| <button class="bg-green-600 hover:bg-green-700 text-white py-2 px-4 rounded-lg flex items-center justify-center" id="createBackupBtn"> | |
| <i class="fas fa-database ml-2"></i> | |
| <span>إنشاء نسخة احتياطية</span> | |
| </button> | |
| <div class="file-upload flex-1"> | |
| <label for="restoreBackup" class="file-upload-label border-2 border-dashed border-gray-300 rounded-lg p-4 flex flex-col items-center justify-center"> | |
| <i class="fas fa-upload text-3xl text-gray-400 mb-2"></i> | |
| <span class="text-gray-500">استعادة نسخة احتياطية</span> | |
| <span class="text-sm text-gray-400">(SQL, ZIP)</span> | |
| <input type="file" id="restoreBackup" accept=".sql,.zip"> | |
| </label> | |
| </div> | |
| </div> | |
| <div class="pt-4 border-t border-gray-200"> | |
| <h4 class="text-md font-medium text-gray-700 mb-2">النسخ الاحتياطية المتاحة</h4> | |
| <div class="overflow-x-auto"> | |
| <table class="min-w-full divide-y divide-gray-200"> | |
| <thead class="bg-gray-50"> | |
| <tr> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">اسم الملف</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">حجم الملف</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">تاريخ الإنشاء</th> | |
| <th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">إجراءات</th> | |
| </tr> | |
| </thead> | |
| <tbody class="bg-white divide-y divide-gray-200" id="backupFilesTable"> | |
| <!-- Backup files will be loaded here via AJAX --> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| </div> | |
| </div> | |
| <!-- View Worker Modal --> | |
| <div id="viewWorkerModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"> | |
| <div class="bg-white rounded-lg shadow-xl w-full max-w-4xl max-h-screen overflow-y-auto"> | |
| <div class="p-6"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-xl font-bold text-gray-800" id="viewWorkerName">عرض بيانات العامل</h3> | |
| <button id="closeViewWorkerModal" class="text-gray-500 hover:text-gray-700"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6"> | |
| <div class="col-span-1 flex flex-col items-center"> | |
| <img id="viewWorkerPhoto" src="https://via.placeholder.com/200" alt="Worker Photo" class="worker-photo rounded-lg mb-4"> | |
| <div class="w-full bg-gray-100 p-4 rounded-lg"> | |
| <h4 class="font-medium text-gray-700 mb-2">معلومات الاتصال</h4> | |
| <p class="text-sm" id="viewWorkerPhone">الهاتف: </p> | |
| <p class="text-sm" id="viewWorkerEmail">البريد الإلكتروني: </p> | |
| <p class="text-sm" id="viewWorkerAddress">العنوان: </p> | |
| </div> | |
| </div> | |
| <div class="col-span-2"> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6"> | |
| <div class="bg-gray-100 p-4 rounded-lg"> | |
| <h4 class="font-medium text-gray-700 mb-2">البيانات الشخصية</h4> | |
| <p class="text-sm" id="viewWorkerNationality">الجنسية: </p> | |
| <p class="text-sm" id="viewWorkerBirthDate">تاريخ الميلاد: </p> | |
| </div> | |
| <div class="bg-gray-100 p-4 rounded-lg"> | |
| <h4 class="font-medium text-gray-700 mb-2">بيانات العمل</h4> | |
| <p class="text-sm" id="viewWorkerWorkType">آلية العمل: </p> | |
| <p class="text-sm" id="viewWorkerArrivalAirport">مطار الوصول: </p> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6"> | |
| <div class="bg-blue-50 p-4 rounded-lg"> | |
| <h4 class="font-medium text-blue-700 mb-2">جواز السفر</h4> | |
| <p class="text-sm" id="viewWorkerPassportNumber">الرقم: </p> | |
| <p class="text-sm" id="viewWorkerPassportIssueDate">تاريخ الإصدار: </p> | |
| <p class="text-sm" id="viewWorkerPassportExpiryDate">تاريخ الانتهاء: </p> | |
| <p class="text-sm font-medium" id="viewWorkerPassportStatus">الحالة: </p> | |
| </div> | |
| <div class="bg-yellow-50 p-4 rounded-lg"> | |
| <h4 class="font-medium text-yellow-700 mb-2">إقامة العمل</h4> | |
| <p class="text-sm" id="viewWorkerResidenceNumber">الرقم: </p> | |
| <p class="text-sm" id="viewWorkerResidenceIssueDate">تاريخ الإصدار: </p> | |
| <p class="text-sm" id="viewWorkerResidenceExpiryDate">تاريخ الانتهاء: </p> | |
| <p class="text-sm font-medium" id="viewWorkerResidenceStatus">الحالة: </p> | |
| </div> | |
| <div class="bg-purple-50 p-4 rounded-lg"> | |
| <h4 class="font-medium text-purple-700 mb-2">بطاقة العمل</h4> | |
| <p class="text-sm" id="viewWorkerWorkCardNumber">الرقم: </p> | |
| <p class="text-sm" id="viewWorkerWorkCardIssueDate">تاريخ الإصدار: </p> | |
| <p class="text-sm" id="viewWorkerWorkCardExpiryDate">تاريخ الانتهاء: </p> | |
| <p class="text-sm font-medium" id="viewWorkerWorkCardStatus">الحالة: </p> | |
| </div> | |
| </div> | |
| <div class="bg-white border border-gray-200 rounded-lg p-4"> | |
| <h4 class="font-medium text-gray-700 mb-2">المستندات المرفقة</h4> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-4" id="viewWorkerDocuments"> | |
| <!-- Documents will be loaded here --> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="flex justify-end mt-4"> | |
| <button id="printWorkerBtn" class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-lg flex items-center mr-2"> | |
| <i class="fas fa-print ml-2"></i> | |
| <span>طباعة</span> | |
| </button> | |
| <button id="closeViewWorkerBtn" class="bg-gray-500 hover:bg-gray-600 text-white py-2 px-4 rounded-lg"> | |
| إغلاق | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- View Document Modal --> | |
| <div id="viewDocumentModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"> | |
| <div class="bg-white rounded-lg shadow-xl w-full max-w-4xl max-h-screen overflow-y-auto"> | |
| <div class="p-6"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-xl font-bold text-gray-800" id="viewDocumentTitle">عرض المستند</h3> | |
| <button id="closeViewDocumentModal" class="text-gray-500 hover:text-gray-700"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="mb-4"> | |
| <div class="flex items-center space-x-4 mb-2"> | |
| <div class="bg-gray-100 p-2 rounded-lg"> | |
| <i class="fas fa-user text-blue-500"></i> | |
| <span class="mr-2" id="viewDocumentWorkerName">أحمد محمد</span> | |
| </div> | |
| <div class="bg-gray-100 p-2 rounded-lg"> | |
| <i class="fas fa-id-card text-yellow-500"></i> | |
| <span class="mr-2" id="viewDocumentNumber">R987654</span> | |
| </div> | |
| <div class="bg-gray-100 p-2 rounded-lg"> | |
| <i class="fas fa-calendar-alt text-purple-500"></i> | |
| <span class="mr-2" id="viewDocumentExpiryDate">15/09/2023</span> | |
| </div> | |
| </div> | |
| <div id="viewDocumentStatus" class="inline-block px-3 py-1 rounded-full text-sm font-medium"> | |
| <!-- Status badge will be added here --> | |
| </div> | |
| </div> | |
| <div class="flex justify-center mb-4"> | |
| <img id="viewDocumentImage" src="https://via.placeholder.com/800x600" alt="Document" class="max-w-full h-auto rounded-lg border border-gray-200"> | |
| </div> | |
| <div class="flex justify-end mt-4"> | |
| <button id="downloadDocumentBtn" class="bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-lg flex items-center mr-2"> | |
| <i class="fas fa-download ml-2"></i> | |
| <span>تحميل</span> | |
| </button> | |
| <button id="closeViewDocumentBtn" class="bg-gray-500 hover:bg-gray-600 text-white py-2 px-4 rounded-lg"> | |
| إغلاق | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Confirmation Modal --> | |
| <div id="confirmationModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"> | |
| <div class="bg-white rounded-lg shadow-xl w-full max-w-md"> | |
| <div class="p-6"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-xl font-bold text-gray-800" id="confirmationTitle">تأكيد الإجراء</h3> | |
| <button id="closeConfirmationModal" class="text-gray-500 hover:text-gray-700"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <p class="mb-6 text-gray-700" id="confirmationMessage">هل أنت متأكد من رغبتك في حذف هذا العامل؟</p> | |
| <div class="flex justify-end space-x-4"> | |
| <button id="cancelConfirmationBtn" class="bg-gray-500 hover:bg-gray-600 text-white py-2 px-4 rounded-lg"> | |
| إلغاء | |
| </button> | |
| <button id="confirmActionBtn" class="bg-red-600 hover:bg-red-700 text-white py-2 px-4 rounded-lg"> | |
| تأكيد | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Loading Spinner --> | |
| <div id="loadingSpinner" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"> | |
| <div class="bg-white p-6 rounded-lg shadow-xl flex flex-col items-center"> | |
| <div class="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-blue-500 mb-4"></div> | |
| <p class="text-gray-700">جاري التحميل...</p> | |
| </div> | |
| </div> | |
| <!-- Success Toast --> | |
| <div id="successToast" class="fixed top-4 right-4 bg-green-500 text-white px-4 py-2 rounded-lg shadow-lg flex items-center transform translate-x-full transition-transform duration-300 z-50"> | |
| <i class="fas fa-check-circle mr-2"></i> | |
| <span id="successToastMessage">تمت العملية بنجاح</span> | |
| </div> | |
| <!-- Error Toast --> | |
| <div id="errorToast" class="fixed top-4 right-4 bg-red-500 text-white px-4 py-2 rounded-lg shadow-lg flex items-center transform translate-x-full transition-transform duration-300 z-50"> | |
| <i class="fas fa-exclamation-circle mr-2"></i> | |
| <span id="errorToastMessage">حدث خطأ ما</span> | |
| </div> | |
| <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | |
| <script> | |
| // Database configuration | |
| const dbConfig = { | |
| host: 'localhost', | |
| user: 'root', | |
| password: '', | |
| database: 'workers_management' | |
| }; | |
| // Global variables | |
| let currentWorkerId = null; | |
| let currentDocumentId = null; | |
| let currentAction = null; | |
| let workersPage = 1; | |
| let documentsPage = 1; | |
| let notificationsPage = 1; | |
| const itemsPerPage = 10; | |
| // DOM Ready | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Initialize the dashboard | |
| loadDashboardData(); | |
| loadRecentWorkers(); | |
| loadRecentAlerts(); | |
| // Setup event listeners | |
| setupEventListeners(); | |
| }); | |
| // Setup all event listeners | |
| function setupEventListeners() { | |
| // Sidebar toggle | |
| document.getElementById('toggleSidebar').addEventListener('click', toggleSidebar); | |
| // Sidebar navigation | |
| const sidebarLinks = document.querySelectorAll('.sidebar-link'); | |
| sidebarLinks.forEach(link => { | |
| link.addEventListener('click', function(e) { | |
| e.preventDefault(); | |
| const sectionId = this.getAttribute('data-section'); | |
| showSection(sectionId); | |
| }); | |
| }); | |
| // Workers section | |
| document.getElementById('addWorkerBtn').addEventListener('click', showAddWorkerForm); | |
| document.getElementById('backToWorkersBtn').addEventListener('click', showWorkersSection); | |
| document.getElementById('cancelWorkerBtn').addEventListener('click', showWorkersSection); | |
| document.getElementById('workerForm').addEventListener('submit', saveWorker); | |
| document.getElementById('workerFilter').addEventListener('change', filterWorkers); | |
| document.getElementById('workerSearch').addEventListener('input', searchWorkers); | |
| document.getElementById('workersPrevPage').addEventListener('click', () => changePage('workers', -1)); | |
| document.getElementById('workersNextPage').addEventListener('click', () => changePage('workers', 1)); | |
| // Documents section | |
| document.getElementById('exportDocumentsBtn').addEventListener('click', exportDocuments); | |
| document.getElementById('documentFilter').addEventListener('change', filterDocuments); | |
| document.getElementById('documentSearch').addEventListener('input', searchDocuments); | |
| document.getElementById('documentsPrevPage').addEventListener('click', () => changePage('documents', -1)); | |
| document.getElementById('documentsNextPage').addEventListener('click', () => changePage('documents', 1)); | |
| // Notifications section | |
| document.getElementById('markAllAsReadBtn').addEventListener('click', markAllAsRead); | |
| document.getElementById('notificationFilter').addEventListener('change', filterNotifications); | |
| document.getElementById('notificationSearch').addEventListener('input', searchNotifications); | |
| document.getElementById('notificationsPrevPage').addEventListener('click', () => changePage('notifications', -1)); | |
| document.getElementById('notificationsNextPage').addEventListener('click', () => changePage('notifications', 1)); | |
| // Reports section | |
| document.getElementById('generateReportBtn').addEventListener('click', generateReport); | |
| // Settings section | |
| document.getElementById('alertSettingsForm').addEventListener('submit', saveAlertSettings); | |
| document.getElementById('createBackupBtn').addEventListener('click', createBackup); | |
| document.getElementById('restoreBackup').addEventListener('change', restoreBackup); | |
| // Modals | |
| document.getElementById('closeViewWorkerModal').addEventListener('click', closeViewWorkerModal); | |
| document.getElementById('closeViewWorkerBtn').addEventListener('click', closeViewWorkerModal); | |
| document.getElementById('printWorkerBtn').addEventListener('click', printWorker); | |
| document.getElementById('closeViewDocumentModal').addEventListener('click', closeViewDocumentModal); | |
| document.getElementById('closeViewDocumentBtn').addEventListener('click', closeViewDocumentModal); | |
| document.getElementById('downloadDocumentBtn').addEventListener('click', downloadDocument); | |
| document.getElementById('closeConfirmationModal').addEventListener('click', closeConfirmationModal); | |
| document.getElementById('cancelConfirmationBtn').addEventListener('click', closeConfirmationModal); | |
| document.getElementById('confirmActionBtn').addEventListener('click', confirmAction); | |
| // File uploads | |
| document.getElementById('workerPhoto').addEventListener('change', handleWorkerPhotoUpload); | |
| document.getElementById('passportImage').addEventListener('change', handlePassportImageUpload); | |
| document.getElementById('residenceImage').addEventListener('change', handleResidenceImageUpload); | |
| document.getElementById('workCardImage').addEventListener('change', handleWorkCardImageUpload); | |
| } | |
| // Toggle sidebar | |
| function toggleSidebar() { | |
| document.querySelector('.sidebar').classList.toggle('collapsed'); | |
| } | |
| // Show specific section | |
| function showSection(sectionId) { | |
| // Hide all sections | |
| document.querySelectorAll('main > div').forEach(section => { | |
| section.classList.add('hidden'); | |
| }); | |
| // Show the selected section | |
| document.getElementById(sectionId).classList.remove('hidden'); | |
| // Update page title | |
| const pageTitle = document.getElementById('pageTitle'); | |
| switch(sectionId) { | |
| case 'dashboardSection': | |
| pageTitle.textContent = 'نظام إدارة بيانات العمال الأجانب'; | |
| break; | |
| case 'workersSection': | |
| pageTitle.textContent = 'إدارة العمال الأجانب'; | |
| loadWorkers(); | |
| break; | |
| case 'documentsSection': | |
| pageTitle.textContent = 'إدارة المستندات'; | |
| loadDocuments(); | |
| break; | |
| case 'notificationsSection': | |
| pageTitle.textContent = 'إدارة التنبيهات'; | |
| loadNotifications(); | |
| break; | |
| case 'reportsSection': | |
| pageTitle.textContent = 'التقارير والإحصائيات'; | |
| loadReports(); | |
| break; | |
| case 'settingsSection': | |
| pageTitle.textContent = 'إعدادات النظام'; | |
| loadSettings(); | |
| break; | |
| } | |
| } | |
| // Show workers section | |
| function showWorkersSection() { | |
| showSection('workersSection'); | |
| } | |
| // Show add worker form | |
| function showAddWorkerForm() { | |
| // Reset form | |
| document.getElementById('workerForm').reset(); | |
| document.getElementById('workerId').value = ''; | |
| document.getElementById('workerPhotoPreview').src = 'https://via.placeholder.com/150'; | |
| document.getElementById('passportImagesContainer').innerHTML = ''; | |
| document.getElementById('residenceImagesContainer').innerHTML = ''; | |
| document.getElementById('workCardImagesContainer').innerHTML = ''; | |
| document.getElementById('formTitle').textContent = 'إضافة عامل جديد'; | |
| // Show form section | |
| document.getElementById('workersSection').classList.add('hidden'); | |
| document.getElementById('workerFormSection').classList.remove('hidden'); | |
| } | |
| // Show edit worker form | |
| function showEditWorkerForm(workerId) { | |
| // Show loading spinner | |
| showLoading(); | |
| // Simulate API call to get worker data | |
| setTimeout(() => { | |
| // In a real app, you would fetch the worker data from the server | |
| const workerData = { | |
| id: workerId, | |
| name: 'أحمد محمد', | |
| nationality: 'الهند', | |
| birthDate: '1990-05-15', | |
| phone: '+9647701234567', | |
| email: 'ahmed@example.com', | |
| address: 'كركوك - العراق', | |
| passportNumber: 'A12345678', | |
| passportIssueDate: '2020-01-10', | |
| passportExpiryDate: '2025-01-10', | |
| residenceNumber: 'R987654', | |
| residenceIssueDate: '2022-09-15', | |
| residenceExpiryDate: '2023-09-15', | |
| workCardNumber: 'W456789', | |
| workCardIssueDate: '2022-10-01', | |
| workCardExpiryDate: '2023-10-01', | |
| arrivalAirport: 'مطار بغداد الدولي', | |
| workType: 'دوام كامل', | |
| passportAlert: true, | |
| residenceAlert: true, | |
| workCardAlert: true, | |
| emailAlert: true, | |
| smsAlert: false, | |
| appAlert: true | |
| }; | |
| // Fill the form with worker data | |
| document.getElementById('workerId').value = workerData.id; | |
| document.getElementById('workerName').value = workerData.name; | |
| document.getElementById('workerNationality').value = workerData.nationality; | |
| </html> |