لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 05/01/25 في كل الموقع
-
ماهي افضل طريقة لتعلم الدورة من حيث استيعاب كامل الدورة وكم المدة التي يجب علي قضائها في تطبيق ما تعلمت بالنسبة لكل ساعة اشاهدها مع المدرب لاني قطعت مدة في الدورة واصبحت لا افهم كل الاكواد و وضائف بعض المكتبات ولاحضت ان المدرب لم يتطرق لي شرحها بالتفصيل3 نقاط
-
السلام عليكم لدي منطق تالي لحساب اجازات بالنسبة للاجازة السنوية تكون 30 يوم في السنة و45 يوما في السنة لمن بلغ سن الخمسين او تجاوزت مدة خدمته عشرين عاما وفي جميع الاحوال يجب ان يتمتع الموظف بإجازة لاتقل عن 15 يوما متصلة في السنة بالنسبة لاجازة المرضية لمدة لاتزيد علي 45 يوم متصلة او 60 يوما متقطعة خلال السنة الواحدة اجازة الحج تكون لعشرين يوما ولاتمنح الي مرة خلال فترة الخدمة اجازة الزواج تكون اسبوعين ولاتمنح الي مرة واحدة خلال فترة الخدمة وفاة الزوج اجازة تكون 4 اشهر و10 ايام هدا كود ساعدني به اخي بلال لكن عندما اختار اجازة سنوية لموظف مثلا من تاريخ 1-1-2024 الي 1-1-2025 يقبله ونوعها اجازة سنوية اليس مفترض يحسب حسب العمر اذا كان 50 ياخد 45 يوم وتجاوز 20 عام في خدمة غير ذلك 30 يوم ممكن تعديل علي كود ليدخل بيانات ومعرفة رصيد موظف لكل اجازة حسب منطق وبارك الله فيكم <?php include('header.php'); error_reporting(0); ini_set('display_errors', 0); function calculateVacationBalance($con, $emp_id, $type, $hire_date, $birth_date, $gender, $to_date) { $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $current_year = $to->format('Y'); // حساب سنوات الخدمة $service_years = $to->diff($hire)->y; // حساب العمر $age = $to->diff($birth)->y; // استعلام للحصول على الأيام المستخدمة $stmt = $con->prepare(" SELECT COALESCE(SUM(DATEDIFF(end_date, start_date) + 1), 0) AS used_days FROM vacations WHERE emp_id = ? AND type = ? AND accept = 1 AND YEAR(start_date) = ? "); $stmt->bind_param("iss", $emp_id, $type, $current_year); $stmt->execute(); $stmt->bind_result($used_days); $stmt->fetch(); $stmt->close(); $used_days = $used_days ?: 0; switch ($type) { case 'اجازة سنوية': // 30 يومًا سنويًا، 45 يومًا إذا كان العمر ≥ 50 أو الخدمة ≥ 20 سنة $annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; $balance = $annual_days - $used_days; // التأكد من أن الرصيد لا يقل عن 15 يومًا متصلة إذا لم يتم استخدامها return max(0, $balance); case 'اجازة مرضية': // 45 يومًا متصلة أو 60 يومًا متقطعة سنويًا $sick_balance = 60 - $used_days; return max(0, $sick_balance); case 'اجازة الحج': // 20 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة الحج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 20; case 'اجازة زواج': // 14 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة زواج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 14; case 'اجازة وفاة الزوج': // 130 يومًا (4 أشهر و10 أيام) للإناث فقط، مرة واحدة if ($gender !== 'أنثى') { return 0; } $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة وفاة الزوج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 130; default: return 0; } } ?> <head> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script> <style> .rak { width: 400px; height: 300px; font-size: 14px !important;} </style> </head> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li><a href="vacations.php">الاجازات</a></li> <li class="active">اضافة اجازة جديد</li> </ol> </div> </div> <div class="row"> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <form method="POST" enctype="multipart/form-data"> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموظف</label> <select name="emp_id" id=""> <?php $sql = "SELECT e.person_id, p.name FROM employees e JOIN people p ON e.person_id = p.id;"; $result = $con->query($sql); while ($row = $result->fetch_assoc()) { echo "<option value='{$row['person_id']}'>{$row['name']}</option>"; } ?> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>نوع الاجازة</label> <select name="type" id=""> <option value="اجازة سنوية">اجازة سنوية</option> <option value="اجازة مرضية">اجازة مرضية</option> <option value="اجازة الحج">اجازة الحج</option> <option value="اجازة زواج">اجازة زواج</option> <option value="اجازة وفاة الزوج">اجازة وفاة الزوج</option> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ البداية</label> <input name="start_date" type="date" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ المباشرة</label> <input name="end_date" type="date" class="form-control"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>سبب الاجازة</label> <input name="reason" type="text" class="form-control" placeholder="ادخل سبب الاجازة"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموافقة مسبقا</label> <input name="companion" type="checkbox" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <button name="submit" type="submit" class="btn btn-primary">إضافة <span class="ion-android-add"></span></button> <button type="reset" class="btn btn-danger">إلغاء <span class="ion-android-delete"></span></button> </div> </div> </div> </form> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $emp_id = $_POST['emp_id']; $type = $_POST['type']; $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; $reason = $_POST['reason']; $companion = isset($_POST['companion']) ? 1 : 0; $created_at = date('Y-m-d H:i:s'); $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $years = $interval->y; $months = $interval->m; $days = $interval->d; $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if ($end <= $start) { $errors[] = 'تاريخ المباشرة يجب أن يكون بعد بداية الإجازة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } mysqli_begin_transaction($con); try { $stmt = $con->prepare("SELECT * FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $employee = $stmt->get_result()->fetch_assoc(); $stmt->close(); if (!$employee) { echo "لم يتم العثور على بيانات الموظف"; exit; } // تحقق لا يوجد إجازة قيد الإجراء $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND accept = 0"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { echo "عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."; exit(); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $people = $stmt->get_result()->fetch_assoc(); $stmt->close(); if ($type == "اجازة سنوية") { $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $service_years = $to->diff($hire)->y; $age = $to->diff($birth)->y; // تحديد الحد الأقصى للإجازة السنوية $max_annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; // حساب عدد أيام الإجازة المطلوبة $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $requested_days = $interval->days + 1; // التحقق من أن عدد أيام الإجازة المطلوبة لا يتجاوز الحد الأقصى if ($requested_days > $max_annual_days) { echo "لا يمكنك طلب إجازة سنوية تتجاوز " . $max_annual_days . " يومًا. الحد الأقصى المسموح به هو: " . $max_annual_days . " يومًا."; exit; } } if ($type == "اجازة مرضية") { } if ($type == "اجازة الحج") { } if ($type == "اجازة زواج") { } if ($type == "اجازة وفاة الزوج") { } $stmt = $con->prepare("INSERT INTO vacations (emp_id, years, months, days, reason, companion, type, start_date, end_date, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $start_date_formatted = $start->format('Y-m-d'); $end_date_formatted = $end->format('Y-m-d'); $stmt->bind_param("iiiisissss", $emp_id, $years, $months, $requested_days, // الآن أصبحت days هي فارق الأيام $reason, $companion, $type, $start_date_formatted, $end_date_formatted, $created_at ); if ($stmt->execute()) { echo "<script> Swal.fire({ title: 'رسالة تأكيد', text: 'تم إضافة بيانات اجازة موظف بنجاح!', icon: 'success', customClass: 'rak', }); </script>"; echo '<meta http-equiv="refresh" content="2;url=vacations.php" />'; } $stmt->close(); mysqli_commit($con); } catch (Exception $e) { mysqli_rollback($con); echo "خطأ: " . $e->getMessage(); exit; } } ?> </div> </div> </div> </div> <?php include('footer.php'); ?>2 نقاط
-
2 نقاط
-
بعد تثبيت الخادم المحلي xampp قمت بتحميل ملف الوردبريس ووضعته في مجلد htdocs وعندما افتح المتصفح واكتب localhost/wordpress/ لا يفتح صفحة التثبيت2 نقاط
-
لم تذكر السبب؟ هل هو لمجال العمل الحر؟ ما الدافع لتعلمه؟ عامًة ليس عليك ذلك نفس الأمر بالنسبة لتعلم لغة جديدة خاصة بالواجهة الخلفية ولتكن C# أو Go أو بايثون، أو حتى إطار خاص بلغة PHP مثل إطار NativePHP. كن مرنًا ولا تجعل نفسك محصورًا في تقنية معينة، أي أن تكون مهندس برمجيات software engineer وليس مطور programmer فقط. وإلا ستبقى محصورًا فقط في المشاريع التي تتطلب لارافل، وفي حال هناك مشروع يتطلب Odoo فلن تتمكن من تقديم عرض عليه أو العمل عليه في حال كنت في شركة. كل ما ستتعلمه سيضيف إليك وليس العكس، وتصبح قادر على العمل على مشاريع أكثر في مجال العمل الحر أو تنفيذ ما تريد في حال تعمل بمفردك أو تضيف إلى مهارة وزيادة قيمتك عند العمل في الشركات. بالطبع لا أقصد أن تقوم بتشتيت نفسك في بدايات تعلمك، لكن بعد الوصول لمستوى متوسط في تخصص معين، كن مرنًا ولا تخف من تعلم تقنية جديدة.2 نقاط
-
تعلم Odoo ليس ضروريًا بشكل مباشر لمطور باك إند يعمل بتقنيات مثل Laravel أو Node.js، لأن Odoo هو نظام تخطيط موارد المؤسسات (ERP) يعتمد على إطار عمل خاص به ويستخدم Python كلغة أساسية. اختصاص مطور الباك إند يعتمد على متطلبات العمل أو المشروع الذي يشارك فيه، إذا كانت الشركة أو المشروع يعتمد على Odoo لإدارة العمليات (مثل المحاسبة، المخزون، المبيعات)، فقد تحتاج إلى تعلمه لتطوير وتخصيص الوحدات (Modules) أو دمج أنظمة أخرى معه، و ايضا Odoo مطلوب في بعض الأسواق، خاصة في الشركات الصغيرة والمتوسطة التي تستخدمه كحل ERP. تعلمه قد يفتح فرص عمل جديدة. و ايضا إذا كنت تعمل على دمج تطبيقات Laravel أو Node.js مع Odoo، ففهم طريقة عمل Odoo (خاصة APIs وXML-RPC) قد يكون ضروريًا.2 نقاط
-
0 bytes مفادها أنّ الملف part1 به مشكلة، هل قمت بتحميله بشكل صحيح أو حدث خطأ أثناء تحميله أو نقله؟ عامًة حاول تثبيت UnRAR: sudo apt install unrar ثم تنفيذ الأمر التالي في مسار المجلد الذي به الملفات: unrar x اسم الملف الذي تريد فك ضغطه أو تجربة أداة أخرى وهي 7-Zip: sudo apt install p7zip-full p7zip-rar ثم تنفيذ: 7z x اسم الملف لو استمرت المشكلة، فالملفات معطوبة.1 نقطة
-
الرسالة الظاهرة تعني أن أحد الأجزاء تالف أو غير مكتمل و غالبا هو الجزء الأول، وهذا يمنع فك الضغط عن الملفات، و بما أن الملفات عبارة عن أجزاء متسلسلة فيجب أن تكون كل الأجزاء موجودة بالكامل، و تكون بنفس الاسم تماما باستثناء الرقم، و تبدأ فك الضغط من part1.rar فقط، والباقي سيتم استخدامه تلقائيا.1 نقطة
-
السلام عليكم هل يتعين على مطور باك اند (laravel, nodejs) أن يتعلم odoo أم أن هذا ليس من اختصاصه؟1 نقطة
-
وعليكم السلام ورحمة الله وبركاته. ليس من الضروري لمطور باك-إند أن يتعلم Odoo ، إلا إذا كان مجال عمله أو الشركة التي يعمل فيها تعتمد على نظام إدارة موارد المؤسسات (ERP) المبني على Odoo فيكون تعلم Odoo مفيدًا. وفي هذا الوقت، أدوات الذكاء الاصطناعي تجعل التوسع في المجالات أمرًا جيدًا وممكنًا أكثر من أي وقت مضى. سواء كنت ترغب في تحسين مهاراتك الحالية أو تعلم تقنيات جديدة، فإن هذه الأدوات توفر لك الدعم اللازم لتوفير الوقت، زيادة الإنتاجية، وتحسين جودة عملك. ولكن ذلك لا يعني ألا التخصص في مجال محدد بمعنى إعطاء الأولوية للتعمق في مجالك، ثم اكتسب خبرات مساعدة توسع من إمكانياتك وتفتح لك فرصاً أوسع.1 نقطة
-
استخدم الدالة التالية سواء في نفس الملف أو في ملف آخر وتستطيع استدعائها: function getVacationBalances(mysqli $con, int $empID, int $year = null): array { $year = $year ?: date('Y'); $balances = []; $stmt = $con->prepare( "SELECT e.start_date AS hire_date, p.birth_date AS birth_date, p.gender AS gender FROM employees e JOIN people p ON p.id = e.person_id WHERE e.person_id = ?"); $stmt->bind_param("i", $empID); $stmt->execute(); $stmt->bind_result($hire_date, $birth_date, $gender); if (!$stmt->fetch()) return []; // لا يوجد موظف $stmt->close(); $to = new DateTime("$year-12-31"); $age = $to->diff(new DateTime($birth_date))->y; $serviceYears = $to->diff(new DateTime($hire_date))->y; $quota = [ 'اجازة سنوية' => ($age >= 50 || $serviceYears >= 20) ? 45 : 30, 'اجازة مرضية' => 60, 'اجازة الحج' => 20, 'اجازة زواج' => 14, 'اجازة وفاة الزوج' => ($gender === 'أنثى' ? 130 : 0), ]; $stmt = $con->prepare( "SELECT type, SUM(DATEDIFF(end_date,start_date)+1) AS used_days FROM vacations WHERE emp_id = ? AND accept = 1 AND ( -- للسنة والمرضية نحصر بالسنة (type IN('اجازة سنوية','اجازة مرضية') AND YEAR(start_date)=?) -- لباقى الأنواع مدى الخدمة كلها OR type NOT IN('اجازة سنوية','اجازة مرضية') ) GROUP BY type"); $stmt->bind_param("ii", $empID, $year); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $balances[$row['type']]['used'] = (int)$row['used_days']; } $stmt->close(); foreach ($quota as $type => $q) { $used = $balances[$type]['used'] ?? 0; $balances[$type] = [ 'quota' => $q, 'used' => $used, 'remaining' => max(0, $q - $used) ]; } return $balances; } الاستدعاء سيكون كالتالي بتمرير الرصيد الحالى للسنة الجارية للدالة getVacationBalances: $balances = getVacationBalances($con, $emp_id); echo "<pre>"; foreach ($balances as $type=>$row){ echo "$type : المستحق = {$row['quota']} | المستخدم = {$row['used']} | المتبقي = {$row['remaining']}\n"; } echo "</pre>";1 نقطة
-
يجب عليك فهم هيكل الكورس حيث الخطوة الأولى هي مراجعة محتوى الكورس بالكامل (الوحدات، المواضيع، المشاريع، الاختبارات) لتكوّن صورة عامة عن المسارات. معظم كورسات الذكاء الاصطناعي في حسوب تشمل: أساسيات البرمجة (مثل Python). الرياضيات للذكاء الاصطناعي (الجبر الخطي، الإحصاء، التفاضل). تعلم الآلة (Machine Learning). التعلم العميق (Deep Learning). معالجة البيانات ومشاريع عملية. ثم وضع خطة دراسية أسبوعية تشمل التحقق من المدة المقترحة للكورس إذا لم تُحدد، افترض أن الكورس يحتاج 3-4 أشهر بمعدل 2-4 ساعات يوميًا ثم تقوم بتقسيم الوحدات إلى أسابيع على سبيل المثال، إذا كان الكورس يحتوي على 12 وحدة، خصص وحدة إلى وحدتين أسبوعيًا ثم خصص يومًا أو يومين في الأسبوع لمراجعة ما درسته أو حل المشاريع/الاختبارات. مثال لجدول أسبوعي (لمدة 3 أشهر) الأحد-الخميس: 2-3 ساعات يوميًا لدراسة وحدة جديدة (محاضرات + تمارين عملية). الجمعة: مراجعة الملاحظات، حل أسئلة إضافية، أو تطبيق مشروع صغير. السبت: يوم راحة أو لتعويض أي تأخير. و لتحقيق أقصى استفادة دون تشتت، اتبع روتين يومي معين حيث قبل البدء حدد هدفًا واضحًا لكل جلسة (مثل: "فهم الجبر الخطي" أو "كتابة كود لخوارزمية التصنيف") ثم جهّز بيئة دراسة هادئة خالية من المشتتات (أغلق الإشعارات، استخدم سماعات) ثم قم بتقسيم الوقت (لجلسة مدتها 2-3 ساعات) فمثلا : 10 دقائق راجع فيها ملخص الدرس السابق أو الملاحظات. 40-50 دقيقة شاهد فيديو المحاضرة أو اقرأ المحتوى النظري مع تدوين النقاط الرئيسية. 10 دقائق استراحة قم و تحرك قليلًا أو اشرب ماء. 40-50 دقيقة ركز على التمارين العملية أو كتابة الكود. إذا كنت تدرس Python أو خوارزميات، جرّب تطبيق ما تعلمته على مشكلة بسيطة. 10 دقائق راجع ما أنجزته، اكتب أي أسئلة أو نقاط غامضة للبحث عنها لاحقًا. نصيحة استخدم تقنية Pomodoro (25 دقيقة دراسة + 5 دقائق استراحة) إذا كنت تجد صعوبة في التركيز لفترات طويلة.1 نقطة
-
كل شيء كما هو، فقط استبدل الكود بداخل كتلة الشرط if ($_SERVER["REQUEST_METHOD"] == "POST")1 نقطة
-
هذا هو الكود كان يوجد مشكلة في إضافة البيانات . إليك الكود بعد التعديل : <?php include('header.php'); error_reporting(0); ini_set('display_errors', 0); function calculateVacationBalance($con, $emp_id, $type, $hire_date, $birth_date, $gender, $to_date) { $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $current_year = $to->format('Y'); // حساب سنوات الخدمة $service_years = $to->diff($hire)->y; // حساب العمر $age = $to->diff($birth)->y; // استعلام للحصول على الأيام المستخدمة $stmt = $con->prepare(" SELECT COALESCE(SUM(DATEDIFF(end_date, start_date) + 1), 0) AS used_days FROM vacations WHERE emp_id = ? AND type = ? AND accept = 1 AND YEAR(start_date) = ? "); $stmt->bind_param("iss", $emp_id, $type, $current_year); $stmt->execute(); $stmt->bind_result($used_days); $stmt->fetch(); $stmt->close(); $used_days = $used_days ?: 0; switch ($type) { case 'اجازة سنوية': // 30 يومًا سنويًا، 45 يومًا إذا كان العمر ≥ 50 أو الخدمة ≥ 20 سنة $annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; $balance = $annual_days - $used_days; // التأكد من أن الرصيد لا يقل عن 15 يومًا متصلة إذا لم يتم استخدامها return max(0, $balance); case 'اجازة مرضية': // 45 يومًا متصلة أو 60 يومًا متقطعة سنويًا $sick_balance = 60 - $used_days; return max(0, $sick_balance); case 'اجازة الحج': // 20 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة الحج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 20; case 'اجازة زواج': // 14 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة زواج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 14; case 'اجازة وفاة الزوج': // 130 يومًا (4 أشهر و10 أيام) للإناث فقط، مرة واحدة if ($gender !== 'أنثى') { return 0; } $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة وفاة الزوج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 130; default: return 0; } } ?> <head> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script> <style> .rak { width: 400px; height: 300px; font-size: 14px !important; } </style> </head> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li><a href="vacations.php">الاجازات</a></li> <li class="active">اضافة اجازة جديد</li> </ol> </div> </div> <div class="row"> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <form method="POST" enctype="multipart/form-data"> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموظف</label> <select name="emp_id" id=""> <?php $sql = "SELECT e.person_id, p.name FROM employees e JOIN people p ON e.person_id = p.id;"; $result = $con->query($sql); while ($row = $result->fetch_assoc()) { echo "<option value='{$row['person_id']}'>{$row['name']}</option>"; } ?> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>نوع الاجازة</label> <select name="type" id=""> <option value="اجازة سنوية">اجازة سنوية</option> <option value="اجازة مرضية">اجازة مرضية</option> <option value="اجازة الحج">اجازة الحج</option> <option value="اجازة زواج">اجازة زواج</option> <option value="اجازة وفاة الزوج">اجازة وفاة الزوج</option> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ البداية</label> <input name="start_date" type="date" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ المباشرة</label> <input name="end_date" type="date" class="form-control"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>سبب الاجازة</label> <input name="reason" type="text" class="form-control" placeholder="ادخل سبب الاجازة"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموافقة مسبقا</label> <input name="companion" type="checkbox" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <button name="submit" type="submit" class="btn btn-primary">إضافة <span class="ion-android-add"></span></button> <button type="reset" class="btn btn-danger">إلغاء <span class="ion-android-delete"></span></button> </div> </div> </div> </form> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $emp_id = $_POST['emp_id']; $type = $_POST['type']; $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; $reason = $_POST['reason']; $companion = isset($_POST['companion']) ? 1 : 0; $created_at = date('Y-m-d H:i:s'); $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $years = $interval->y; $months = $interval->m; $days = $interval->d; $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if ($end <= $start) { $errors[] = 'تاريخ المباشرة يجب أن يكون بعد بداية الإجازة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } mysqli_begin_transaction($con); try { $stmt = $con->prepare("SELECT * FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $employee = $stmt->get_result()->fetch_assoc(); $stmt->close(); if (!$employee) { echo "لم يتم العثور على بيانات الموظف"; exit; } // تحقق لا يوجد إجازة قيد الإجراء $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND accept = 0"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { echo "عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."; exit(); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $people = $stmt->get_result()->fetch_assoc(); $stmt->close(); if ($type == "اجازة سنوية") { $to_date = $start_date; $hire_date = $employee->start_date; $birth_date = $people->birth_date; $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $service_years = $to->diff($hire)->y; $age = $to->diff($birth)->y; // تحديد الحد الأقصى للإجازة السنوية $max_annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; // حساب عدد أيام الإجازة المطلوبة $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $requested_days = $interval->days + 1; // التحقق من أن عدد أيام الإجازة المطلوبة لا يتجاوز الحد الأقصى if ($requested_days > $max_annual_days) { echo "لا يمكنك طلب إجازة سنوية تتجاوز " . $max_annual_days . " يومًا. الحد الأقصى المسموح به هو: " . $max_annual_days . " يومًا."; exit; } } if ($type == "اجازة مرضية") { $stmt = $con->prepare("SELECT COALESCE(SUM(DATEDIFF(end_date,start_date)+1),0) FROM vacations WHERE emp_id = ? AND type = 'اجازة مرضية' AND accept = 1 AND YEAR(start_date)=?"); $stmt->bind_param("ii", $emp_id, $current_year); $stmt->execute(); $stmt->bind_result($used); $stmt->fetch(); $stmt->close(); if ($requested_days > 45) { echo 'الحد الأقصى المستمر للإجازة المرضية هو 45 يوم.'; exit; } if (($used + $requested_days) > 60) { $left = 60 - $used; echo "المتبقى من رصيد الإجازة المرضية هذا العام هو $left يوم."; exit; } } if ($type == "اجازة الحج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id=? AND type='اجازة الحج' AND accept=1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); if ($taken) { echo 'تمّ الحصول على إجازة الحج من قبل، لا تُمنح إلا مرة واحدة.'; exit; } if ($requested_days > 20) { echo 'الحد الأقصى لإجازة الحج 20 يوم.'; exit; } } if ($type == "اجازة زواج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id=? AND type='اجازة زواج' AND accept=1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); if ($taken) { echo 'تمّ الحصول على إجازة زواج سابقًا، لا تُمنح إلا مرة واحدة.'; exit; } if ($requested_days > 14) { echo 'الحد الأقصى لإجازة الزواج هو 14 يوم.'; exit; } } if ($type == "اجازة وفاة الزوج") { if ($gender != 'أنثى') { echo 'إجازة وفاة الزوج خاصة بالإناث فقط.'; exit; } $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id=? AND type='اجازة وفاة الزوج' AND accept=1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); if ($taken) { echo 'تمّ الحصول على هذه الإجازة سابقًا، لا تُمنح إلا مرة واحدة.'; exit; } if ($requested_days != 130) { echo 'مدة الإجازة هى 4 أشهر و10 أيام (130 يوم) ويجب إدخال المدة كاملة.'; exit; } } $stmt = $con->prepare("INSERT INTO vacations (emp_id, years, months, days, reason, companion, type, start_date, end_date, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $start_date_formatted = $start->format('Y-m-d'); $end_date_formatted = $end->format('Y-m-d'); $stmt->bind_param( 'iiiisissss', $emp_id, $years, $months, $requested_days, // الآن أصبحت days هي فارق الأيام $reason, $companion, $type, $start_date_formatted, $end_date_formatted, $created_at ); if ($stmt->execute()) { echo "<script> Swal.fire({ title: 'رسالة تأكيد', text: 'تم إضافة بيانات اجازة موظف بنجاح!', icon: 'success', customClass: 'rak', }); </script>"; echo '<meta http-equiv="refresh" content="2;url=vacations.php" />'; } $stmt->close(); mysqli_commit($con); } catch (Exception $e) { mysqli_rollback($con); echo "خطأ: " . $e->getMessage(); exit; } } ?> </div> </div> </div> </div> <?php include('footer.php'); ?> إذا حدثت مشكلة يرجى إرفاق المشكلة هنا.1 نقطة
-
انا عند اضافة الاجازة لاخزن بيانات الي في جدول vacations اما اسماء اعمدة في جدول people الجنس gender تاريخ الميلاد birth_date في جدول employees تاريخ التعيين start_date دالة تستقبل متغيرات هما نص الاتصال معرف الموظف نوع الاجازة تاريخ التعيين تاريخ الميلاد والجنس وتاريخ نهاية اجازة الذي يدخله مستخدم في input ماذا اكتب في باقي if ($_SERVER["REQUEST_METHOD"] == "POST") { $emp_id = $_POST['emp_id']; $type = $_POST['type']; $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; $reason = $_POST['reason']; $companion = isset($_POST['companion']) ? 1 : 0; $created_at = date('Y-m-d H:i:s'); $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $years = $interval->y; $months = $interval->m; $days = $interval->d; $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if ($end <= $start) { $errors[] = 'تاريخ المباشرة يجب أن يكون بعد بداية الإجازة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } mysqli_begin_transaction($con); try { $stmt = $con->prepare("SELECT * FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $employee = $stmt->get_result()->fetch_assoc(); $stmt->close(); if (!$employee) { echo "لم يتم العثور على بيانات الموظف"; exit; } // تحقق لا يوجد إجازة قيد الإجراء $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND accept = 0"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { echo "عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."; exit(); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $people = $stmt->get_result()->fetch_assoc(); $stmt->close(); if ($type == "اجازة سنوية") { $hire= new DateTime($employee['start_date']); $birth_date=new DateTime($people['birth_date']); $gender=$people['gender']; $to=new DateTime($end_date); }1 نقطة
-
بالنسبة لتاريخ ميلاد والجنس الموظف موجدان في جدول people اما بالنسبة تاريخ مباشرة موظف فهيا في جدول employees اما اين اريد تخزين اجازة موظف في جدول vacations1 نقطة
-
وعليكم السلام ورحمة الله وبركاته. المنطق في الكود صحيح ولكن الخطأ في المتغيرات والبيانات التي تستخدمها. أولا يجب الإنتباه إلى أن الدالة calculateVacationBalance لديك لا يتم إستخدامها فقط تم تعريفها. أما المشكلة الرئيسية لديك هنا في هذا الجزء . لاحظ في هذا الجزء أنت تستخدم المتغيرات to_date و hire_date و birth_date وتلك المتغيرات لم يتم تعريفهم وإحضارهم من قاعدة البيانات. لهذا يتم حساب جميع تلك التواريخ من التاريخ الحالي . أى أن تاريخ to و تاريخ hire و تاريخ birth يصبحان التاريخ الحالي عند تنفيذ الكود . ولهذا عندما يتم إحتساب الفرق يظهر الفرق دائما ب 0 . أى أنه يحسب عمر الشخص ب 0 و مدة التعيين ب 0 أيضا لهذا لا يعمل المنطق لديك. لذلك يجب عليك إحضار بيانات تاريخ الميلاد و بيانات موعد التعين ووضعها في المتغيرات hire_date و birth_date وسيعمل معك . يرجى توضيح أين يتم تخزين تلك البيانات في قاعدة البيانات لمساعدتك في هذا الأمر.1 نقطة
-
قم بفتح منفذ الأوامر م نفذ الأمر التالي لتشغيل خادم apache و mysql: sudo /opt/lampp/lampp start ثم توجه لرابط المشروع في المتصفح مجددًا.1 نقطة
-
1 نقطة
-
قمت بوضع دالة في كود ادخال الان عدل لي كود ليبدا يعمل صحيح <?php include('header.php'); error_reporting(0); ini_set('display_errors', 0); function calculateVacationBalance($con, $emp_id, $type, $hire_date, $birth_date, $gender, $to_date) { $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $current_year = $to->format('Y'); // حساب سنوات الخدمة $service_years = $to->diff($hire)->y; // حساب العمر $age = $to->diff($birth)->y; // استعلام للحصول على الأيام المستخدمة $stmt = $con->prepare(" SELECT COALESCE(SUM(DATEDIFF(end_date, start_date) + 1), 0) AS used_days FROM vacations WHERE emp_id = ? AND type = ? AND accept = 1 AND YEAR(start_date) = ? "); $stmt->bind_param("iss", $emp_id, $type, $current_year); $stmt->execute(); $stmt->bind_result($used_days); $stmt->fetch(); $stmt->close(); $used_days = $used_days ?: 0; switch ($type) { case 'اجازة سنوية': // 30 يومًا سنويًا، 45 يومًا إذا كان العمر ≥ 50 أو الخدمة ≥ 20 سنة $annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; $balance = $annual_days - $used_days; // التأكد من أن الرصيد لا يقل عن 15 يومًا متصلة إذا لم يتم استخدامها return max(0, $balance); case 'اجازة مرضية': // 45 يومًا متصلة أو 60 يومًا متقطعة سنويًا $sick_balance = 60 - $used_days; return max(0, $sick_balance); case 'اجازة الحج': // 20 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة الحج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 20; case 'اجازة زواج': // 14 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة زواج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 14; case 'اجازة وفاة الزوج': // 130 يومًا (4 أشهر و10 أيام) للإناث فقط، مرة واحدة if ($gender !== 'أنثى') { return 0; } $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة وفاة الزوج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 130; default: return 0; } } ?> <head> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script> <style> .rak { width: 400px; height: 300px; font-size: 14px !important;} </style> </head> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li><a href="vacations.php">الاجازات</a></li> <li class="active">اضافة اجازة جديد</li> </ol> </div> </div> <div class="row"> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <form method="POST" enctype="multipart/form-data"> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموظف</label> <select name="emp_id" id=""> <?php $sql = "SELECT e.person_id, p.name FROM employees e JOIN people p ON e.person_id = p.id;"; $result = $con->query($sql); while ($row = $result->fetch_assoc()) { echo "<option value='{$row['person_id']}'>{$row['name']}</option>"; } ?> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>نوع الاجازة</label> <select name="type" id=""> <option value="اجازة مرضية">اجازة مرضية</option> <option value="اجازة وضع">اجازة وضع</option> <option value="اجازة بدون مرتب">اجازة بدون مرتب</option> <option value="اجازة زواج">اجازة زواج</option> <option value="اجازة سنوية">اجازة سنوية</option> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ البداية</label> <input name="start_date" type="date" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ المباشرة</label> <input name="end_date" type="date" class="form-control"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>سبب الاجازة</label> <input name="reason" type="text" class="form-control" placeholder="ادخل سبب الاجازة"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموافقة مسبقا</label> <input name="companion" type="checkbox" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <button name="submit" type="submit" class="btn btn-primary">إضافة <span class="ion-android-add"></span></button> <button type="reset" class="btn btn-danger">إلغاء <span class="ion-android-delete"></span></button> </div> </div> </div> </form> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $emp_id = $_POST['emp_id']; $type = $_POST['type']; $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; $reason = $_POST['reason']; $companion = isset($_POST['companion']) ? 1 : 0; $created_at = date('Y-m-d H:i:s'); $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $years = $interval->y; $months = $interval->m; $days = $interval->d; $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if ($end <= $start) { $errors[] = 'تاريخ المباشرة يجب أن يكون بعد بداية الإجازة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } mysqli_begin_transaction($con); try { $stmt = $con->prepare("SELECT * FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $employee = $stmt->get_result()->fetch_assoc(); $stmt->close(); if (!$employee) { echo "لم يتم العثور على بيانات الموظف"; exit; } // تحقق لا يوجد إجازة قيد الإجراء $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND accept = 0"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { echo "عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."; exit(); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $people = $stmt->get_result()->fetch_assoc(); $stmt->close(); if ($type == "اجازة وضع" && $people['gender'] == "ذكر") { echo "عذرًا، لا يمكن إعطاء هذا النوع من الإجازة للموظف المختار."; exit(); } if ($type == "اجازة زواج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND type = ? "); $stmt->bind_param("is", $emp_id, $type); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { echo "عذرًا، الموظف المختار قد حصل على إجازة زواج مسبقًا."; exit(); } $stmt = $con->prepare("SELECT start_date, end_date FROM vacations WHERE emp_id = ? AND type = ?"); $stmt->bind_param("is", $emp_id, $type); $stmt->execute(); $stmt->bind_result($s, $e); $stmt->fetch(); $stmt->close(); if ($s && $e) { $days = (new DateTime($e))->diff(new DateTime($s))->days; if ($days > 14) { echo "عذرًا، إجازة الزواج لا يمكن أن تتجاوز أسبوعين."; exit(); } } } if ($type == "اجازة سنوية") { $hire_date = $employee['start_date']; $requested_start_str = $start->format('Y-m-d'); $stmt = $con->prepare(" SELECT COALESCE(SUM(DATEDIFF(end_date, start_date)),0) AS used FROM vacations WHERE emp_id = ? AND type = 'اجازة سنوية' AND accept = 1 AND end_date <= ? "); $stmt->bind_param("is", $emp_id, $requested_start_str); $stmt->execute(); $stmt->bind_result($used_days); $stmt->fetch(); $stmt->close(); $vacation_balance = calculateVacationBalance($hire_date, $requested_start_str, $used_days); if ($vacation_balance < $requested_days) { echo "عذرًا، لا يمكن إنشاء الإجازة لعدم توفر الرصيد الكافي. رصيدك: $vacation_balance يوم، والطلب: $requested_days يوم"; exit(); } } if ($type == "اجازة بدون مرتب" ) { $days = 365; } $stmt = $con->prepare("INSERT INTO vacations (emp_id, years, months, days, reason, companion, type, start_date, end_date, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $start_date_formatted = $start->format('Y-m-d'); $end_date_formatted = $end->format('Y-m-d'); $stmt->bind_param("iiiisissss", $emp_id, $years, $months, $requested_days, // الآن أصبحت days هي فارق الأيام $reason, $companion, $type, $start_date_formatted, $end_date_formatted, $created_at ); if ($stmt->execute()) { echo "<script> Swal.fire({ title: 'رسالة تأكيد', text: 'تم إضافة بيانات اجازة موظف بنجاح!', icon: 'success', customClass: 'rak', }); </script>"; echo '<meta http-equiv="refresh" content="2;url=vacations.php" />'; } $stmt->close(); mysqli_commit($con); } catch (Exception $e) { mysqli_rollback($con); echo "خطأ: " . $e->getMessage(); exit; } } ?> </div> </div> </div> </div> <?php include('footer.php'); ?>1 نقطة
-
سلام عليكم أنا الآن بدأت في الكورس الذكاء الإصطناعي الخاص بأكاديمية حسوب وأنا أريد خطة دراسية جيدة لهذا الكورس حتى لا يحدث لي تشتت او عدم تركيز في بعض المسارات وكيفية الدراسة اليومية له أريد أن أخرج من هذا الكورس بقاعدة معرفية جيدة تحياتي1 نقطة
-
وعليكم السلام ورحمة الله وبركاته. إن الدورات هنا في الأكاديمية تم تصميمها بعناية وترتيب مناسب للمبتدئين . حيث تم تقسم الدورة إلى عدة مسارات وكل مسار تم تقسيمه إلى عدة أقسام والأقسام تحتوي على الدروس . لهذا يجب عليك دراسة الدورة كما هي بالترتيب حيث تبدأ بالمسارات الأولى وهي الخاصة بدراسة الأساسيات و التطبيق مع المدرب وحل التمارين المطلوبة . وتأكد من عدم تخطي أى درس دون فهمه تماما والتطبيق عليه مع المدرب . وإذا واجهتك أى مشكلة أو صعوبة في جزء ما يمكنك السؤال دائما أسفل الدرس الذي توجد به مشكلتك وسيتم المتابعة معك من خلال المدربين الموجودين في الأكاديمية. وبالنسبة للطريقة الصحيحة للتعلم تختلف من شخص لآخر، ولكن بشكل عام ينصح بتسجيل المعلومات التي تستوعبها من خلال كتابة ملاحظات أو إجراء ملخصات أو حل تمارين. كما يمكنك مشاهدة الفيديو أكثر من مرة إذا شعرت بأنك بحاجة إلى توضيح أو تعميق أكثر وعدم تخطيه دون فهمه تماما كما وضحت لك سابقا. ، ثم بعد ذلك يمكنك التدرب عن طريق التطبيق عمليا على ماتعلمته من خلال القيام بتمارين عملية وتطبيق الأفكار التي تم تعلمها. و يفضل متابعة الفيديوهات أكثر من مرة لضمان فهمك للدرس جيدًا، ويفضل أيضًا أن تقوم بالتطبيق العملي لما تعلمته فور انتهاء كل درس وذلك لتثبيت المفاهيم وتطوير مهاراتك العملية. ويمكنك قراءة المزيد من التفاصيل والنصائح من خلال الإجابات التالية :1 نقطة
-
وعليكم السلام ورحمة الله وبركاته. إن تعلم Odoo ليس أمر ضروري لمطورين ال back end والمتخصصين في Laravel و Node.js . حيث إن odoo هو نظام مفتوح المصدر لإدارة الأعمال (ERP) يهدف إلى دمج مختلف الوظائف التجارية والإدارية في منصة واحدة. ويستخدم بشكل واسع من قبل الشركات الصغيرة والمتوسطة والكبيرة لتسهيل إدارة العمليات اليومية مثل المحاسبة و المخزون و المبيعات و إدارة العملاء والموارد البشرية والعديد من الوظائف الأخرى. وهو قائم على لغة بايثون . وإن مطورين odoo مختلفين تماما عن مطورين laravel و Node.js ولهم مسمى وظيفي منفصل. لهذا إذا لم تكن تريد أن تعمل على مشروع odoo او تعمل في تطوير تطبيقات odoo وإضافة أنظمة بها أو لا تريد التقديم على شركات تعمل بشكل أساسي على odoo فإذا لا داعي لتعلمه وهذا ليس إختصاصك . ويجب عليك التركيز على جزء واحد معين إما php مع laravel أو java script مع Node.js أو odoo .1 نقطة
-
للوهلة الأولى الموقع يحتاج إلى توفير حقل بحث من أجل الوصول السريع للمنطقة الخاصة بالمستخدم، تستطيع استخدام Algolia أو أي خدمة أخرى لتوفير البحث بدلاً من قائمة الروابط الطويلة وأبقي القائمة في أسفل الصفحة لمن يُفضل التصفّح اليدوي. أيضًا ميزة تحديد المنطقة تلقائيًا عن طريق الـ GPS لعرض أوقات الصلاة مباشرة دون الحاجة إلى اختيار المدينة يدويًا. ثم أضف ميزة إشعارات Push Notifications عبر المتصفح أو تطبيق مصاحب لتذكير المستخدمين بأوقات الصلاة. واعرض الصلاة القادمة بشكل بارز مع عداد تنازلي للوقت المتبقي، ويا حبذا لو قمت بعرض آيات قرآنية أو ذكر بتخصيص جزء من الصفحة كركن معلومة اليوم به آية أو حديث أو تذكير فقهي قصير يظهر أسفل الجدول، يتبدّل يوميًا. كالتالي: ويتغيّر لون البطاقة قبل الأذان بخمس دقائق كتنبيه بصري فوري. وعرض التاريخ الميلادي والهجري بالموقع ولو قمت بعرض السنن الخاصة بكل صلاة أمر ممتاز أيضًا. أيضًا شريط تقدّم اليوم كخط أفقي من الفجر للعشاء يُظهر موضعنا الحالي في اليوم، وميزة تحديد القبلة من خلال البوصلة. من حيث التصميم، فالموقع بحاجة إلى تحسين التصميم وأول هام بطاقة لكل صلاة بها أيقونة، اسم، وقت، عدّاد صغير، لون مخصص، استخدام Grid بسيط ليظهر في سطرين على سطح المكتب وسطر واحد قابل للتمرير على الجوال.1 نقطة