اذهب إلى المحتوى

لوحة المتصدرين

  1. ايمن ميلاد

    ايمن ميلاد

    الأعضاء


    • نقاط

      8

    • المساهمات

      386


  2. بلال زيادة

    بلال زيادة

    الأعضاء


    • نقاط

      3

    • المساهمات

      4657


  3. Ali Ahmed55

    Ali Ahmed55

    الأعضاء


    • نقاط

      3

    • المساهمات

      2033


  4. محمد_عاطف

    محمد_عاطف

    الأعضاء


    • نقاط

      2

    • المساهمات

      8389


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 04/24/25 في كل الموقع

  1. السلام عليكم هو اي الPython Launcher ؟
    3 نقاط
  2. السلام عليكم انا اقوم بتحويل كود داخل دالة store الي php pure ممكن مساعدة في باقي request()->validate( [ 'type' => "required", 'start_date' => "required", 'end_date' => 'required', ], [ 'type.required' => 'يجب تحديد نوع الاجازة', 'start_date.required' => 'يجب إدخال تاريخ بداية الإجازة', 'end_date.required' => 'يجب ادخال تاريخ المباشرة', ]); DB::beginTransaction(); try { $vac = new Vacation; if($id == 0){ $emp = Employee::find(request('emp_id')); }else{ $emp = Employee::find($id); } if(Vacation::where([['emp_id', $emp->id],['accept', false]])->exists()){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن هنالك أجازة قيد الاجراء للموظف الحالي الرجاء التحقق'); } if(!request('years') && !request('months') && !request('days')){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن يجب تعبئة إحدي الخانات علي الاقل (السنوات ,الاشهر ,الايام)'); } if(request('type') == "إجازة وضع" && $emp->gender == 1 && $emp->status == 1){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن لا يمكن أعطاء هذا النوع من الاجازة للموظف المختار'); } if(request('type') == "إجازة زواج" && $emp->vacations()->where("type", "إجازة زواج")->count() != 0 && $emp->status == 0 ){ DB::rollback(); return redirect()->back()->with('error','عذرآ الموظف المختار قد تحصل علي أجاة زواج مسبقآ'); } $vac->emp_id = $emp->id; $vac->type = request('type'); if(request('type') == "إجازة سنوية"){ $vac->days = request('days'); $date = Carbon::createFromFormat('Y-m-d', $emp->start_date); $date = $date->addYear(); $date = $date->toDateString(); if($emp->vacations){ $vacationBalance = $this->calculateVacationBalance($date, $emp->vacations->where('accept', true)->sum("days")); }else{ $vacationBalance = $this->calculateVacationBalance($date, 0); } if($vacationBalance < $vac->days){ DB::rollback(); return redirect()->back()->with('error','عذرآ لايمكن أنشاء إجازة وذلك لعدم توفر الرصيد الكافي...'); } هذا كودي انا if ($_SERVER["REQUEST_METHOD"] == "POST") { $emp_id = $_POST['emp_id']; // يتم تخزين 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'); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $gender = $row['gender']; } if ($type == "اجازة وضع" && $gender == "ذكر") { echo "عذرآ ولكن لا يمكن إعطاء هذا النوع من الإجازة للموظف المختار لأنه ذكر."; } 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(); } } if ($type == "اجازة سنوية") { $startDate = new DateTime($start_date); $endDate = new DateTime($end_date); $interval = $startDate->diff($endDate); $daysDiff = $interval->days+1; //عدد ايام بين تاريخ بداية اجازة وتاريخ نهاية اجازة $stmt = $con->prepare("SELECT * FROM employees WHERE person_id= ?"); //جلب تاريخ مباشرة موظف $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $s_date = new DateTime($row['start_date']); $s_date->modify('+1 year'); $s_date->format('Y-m-d'); } } ممكن شرح جزئية باقية اخواني الكرام if($emp->vacations){ $vacationBalance = $this->calculateVacationBalance($date, $emp->vacations->where('accept', true)->sum("days")); }else{ $vacationBalance = $this->calculateVacationBalance($date, 0); } if($vacationBalance < $vac->days){ DB::rollback(); return redirect()->back()->with('error','عذرآ لايمكن أنشاء إجازة وذلك لعدم توفر الرصيد الكافي...'); }
    2 نقاط
  3. كيف أتعلم البرمجةبطريقة ممتازه بدون تشتت؟ كم ساعة أحتاج يومياً؟ هل الأفضل التخصص في مجال واحد أم تجربة أكثر من مجال؟ كيف أتعلم كتابة كود نظيف وسهل القراءة؟ كيف أتعامل مع الإحباط أو التشتت أثناء التعلم؟ كيف أعرف أني جاهزة للانتقال لمستوى متقدم؟ ما هو الخطأ الذي إذا تجنبته توفر علي الكثير من الوقت؟ أنا مبتدئة في البرمجة وعندي خلفية بسيطة عن لغات البرمجة لكني لا زلت غير واضحة في وظيفة كل لغة ومتى أستخدمها أنا مهتمة بتخصص الذكاء الاصطناعي وأرغب في معرفة ما هي أهم اللغات التي أحتاج لتعلمها للنجاح في هذا المجال ما ترتيب تعلم هذه اللغات وهل أبدأ مثلا بـ Python فقط ثم أنتقل لشيء آخر هل أحتاج لفهم الخوارزميات والرياضيات الآن أم لاحقا ما أهم المسارات أو المهارات التي يجب أن أركز عليها كمبتدئة في الذكاء الاصطناعي
    2 نقاط
  4. السلام عليكم اريد ان اعرف متى يمكنني ان احصل على شهادة تطوير واجهات المستخدم وكل تفاصيل اخذ الشهادة وتمنياتي لكم بالصحة والعافية
    2 نقاط
  5. اخي انا اعمل علي تحويل كود حفظ اجازة موظف من laravel الي php بعض جزئيات لم افهم في كود
    2 نقاط
  6. وعليكم السلام ورحمة الله وبركاته. يمكنك التقدم إلى امتحان الدورة (في أي وقت)، من خلال التواصل مع مركز مساعدة أكاديمية حسوب، مع مراعاة الشروط التالية: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا و هذه خطوات الامتحان 1. تواصل معنا أخبرنا برغبتك باجراء الامتحان مع تزويدنا بروابط مشاريعك التي طبقتها أثناء الدورة. يجب أن تكون قد طبقت المشاريع مع المدرب أثناء الدورة، ولا يمكن اجراء امتحان بمشاهدة المحتوى فقط. 2. محادثة صوتية سنحدد لك موعد لاجراء محادثة صوتية لمدة 30 دقيقة يطرح المدرب فيها أسئلة متعلقة بالدورة ويناقش معك ما نفذته خلالها. 3. مشروع التخرج سيحدد لك المدرب مشروعًا مرتبطًا بما تعلمته أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. 4. مراجعة المشروع والتخرج سيراجع المدرب المشروع الذي أنجزته، وإن سارت جميع الخطوات السابقة بشكل صحيح، ستتخرج وتحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد. يمكنك معرفة تفاصيل أكثر من خلال هذه الصفحة.
    1 نقطة
  7. اتصال صحيح عند عمل var_dump تظهر بيانات
    1 نقطة
  8. حسنا هذا هو الكود المحول <?php // دالة calculateVacationBalance function calculateVacationBalance($startDate, $usedDays) { $start = new DateTime($startDate); $now = new DateTime(); $totalAccruedDays = 0; if ($start->format('n') > 6) { $start->setDate($start->format('Y') + 1, 1, 1); } elseif ($start->format('n') < 6 || ($start->format('n') == 6 && $start->format('j') > 1)) { $start->setDate($start->format('Y'), 6, 1); } elseif ($start->format('n') == 1 && $start->format('j') > 1) { $start->setDate($start->format('Y'), 6, 1); } while ($start <= $now) { $totalAccruedDays += 15; $start->modify('+6 months'); } $totalAccruedDays -= $usedDays; return $totalAccruedDays; } // الكود الرئيسي لحفظ الإجازة if ($_SERVER["REQUEST_METHOD"] == "POST") { // افترض أن $con هو اتصال قاعدة البيانات // $con = mysqli_connect("localhost", "username", "password", "database"); // $user_id = 1; // معرف المستخدم الحالي (يجب جلبها من جلسة تسجيل الدخول) // $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; // معرف الموظف من المعاملات أو النموذج // جلب البيانات من النموذج $emp_id = isset($_POST['emp_id']) ? (int)$_POST['emp_id'] : 0; $type = isset($_POST['type']) ? $_POST['type'] : ''; $start_date = isset($_POST['start_date']) ? $_POST['start_date'] : ''; $end_date = isset($_POST['end_date']) ? $_POST['end_date'] : ''; $reason = isset($_POST['reason']) ? $_POST['reason'] : ''; $companion = isset($_POST['person']) ? 1 : 0; $approve = isset($_POST['approve']) ? 1 : 0; $years = isset($_POST['years']) ? $_POST['years'] : ''; $months = isset($_POST['months']) ? $_POST['months'] : ''; $days = isset($_POST['days']) ? (int)$_POST['days'] : 0; $created_at = date('Y-m-d H:i:s'); // التحقق من البيانات المطلوبة $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } // بدء المعاملة mysqli_begin_transaction($con); try { // جلب بيانات الموظف if ($id == 0) { $stmt = $con->prepare("SELECT id, gender, status, start_date FROM people p JOIN employees e ON p.id = e.person_id WHERE p.id = ?"); $stmt->bind_param("i", $emp_id); } else { $stmt = $con->prepare("SELECT id, gender, status, start_date FROM people p JOIN employees e ON p.id = e.person_id WHERE p.id = ?"); $stmt->bind_param("i", $id); $emp_id = $id; } $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows == 0) { throw new Exception("الموظف غير موجود."); } $employee = $result->fetch_assoc(); $stmt->close(); // التحقق من وجود إجازة قيد الإجراء $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) { throw new Exception("عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."); } // التحقق من تعبئة المدة if (empty($years) && empty($months) && empty($days)) { throw new Exception("عذرًا، يجب تعبئة إحدى الخانات على الأقل (السنوات، الأشهر، الأيام)."); } // التحقق من إجازة وضع if ($type == "إجازة وضع" && $employee['gender'] == 1 && $employee['status'] == 1) { throw new Exception("عذرًا، لا يمكن إعطاء هذا النوع من الإجازة للموظف المختار."); } // التحقق من إجازة زواج 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 && $employee['status'] == 0) { throw new Exception("عذرًا، الموظف المختار قد حصل على إجازة زواج مسبقًا."); } } // معالجة عدد الأيام $vacation_days = null; if ($type == "إجازة سنوية") { $vacation_days = $days; // حساب رصيد الإجازة $start_date_calc = new DateTime($employee['start_date']); $start_date_calc->modify('+1 year'); $start_date_calc = $start_date_calc->format('Y-m-d'); $stmt = $con->prepare("SELECT SUM(days) as total_days FROM vacations WHERE emp_id = ? AND accept = 1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $used_days = $row['total_days'] ? $row['total_days'] : 0; $stmt->close(); $vacation_balance = calculateVacationBalance($start_date_calc, $used_days); if ($vacation_balance < $vacation_days) { throw new Exception("عذرًا، لا يمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي."); } } elseif ($type == "إجازة بدون مرتب" && !isset($_POST['person'])) { $vacation_days = 365; } // إدخال بيانات الإجازة $stmt = $con->prepare("INSERT INTO vacations (emp_id, type, days, start_date, end_date, reason, companion, accept, created_id, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("isisssiiis", $emp_id, $type, $vacation_days, $start_date, $end_date, $reason, $companion, $approve, $user_id, $created_at); if (!$stmt->execute()) { throw new Exception("خطأ أثناء إنشاء الإجازة."); } $vacation_id = $con->insert_id; $stmt->close(); // معالجة الملفات المرفقة if (!empty($_FILES['files']['name'][0])) { $upload_dir = 'public/VACATION/'; if (!file_exists($upload_dir)) { mkdir($upload_dir, 0777, true); } $file_inserts = []; foreach ($_FILES['files']['name'] as $key => $file_name) { if ($_FILES['files']['error'][$key] == UPLOAD_ERR_OK) { $file_ext = pathinfo($file_name, PATHINFO_EXTENSION); $file_name_new = time() . '_' . $key . '.' . $file_ext; $file_path = $upload_dir . $file_name_new; if (move_uploaded_file($_FILES['files']['tmp_name'][$key], $file_path)) { $file_inserts[] = " ('vacation', $vacation_id, '$file_path') "; } } } if (!empty($file_inserts)) { $query = "INSERT INTO files (type, procedure_id, path) VALUES " . implode(',', $file_inserts); if (!$con->query($query)) { throw new Exception("خطأ أثناء حفظ الملفات."); } } } // تسجيل السجل (Log) $log_title = "إضافة إجازة جديدة ($type)"; $log_message = "تمت إضافة إجازة جديدة ($type)"; $stmt = $con->prepare("INSERT INTO logs (user_id, type, emp_id, title, log, created_at) VALUES (?, ?, ?, ?, ?, ?)"); $log_type = 7; $stmt->bind_param("iiisss", $user_id, $log_type, $emp_id, $log_title, $log_message, $created_at); if (!$stmt->execute()) { throw new Exception("خطأ أثناء تسجيل السجل."); } $stmt->close(); // تحديث حالة الموظف إذا كانت إجازة زواج if ($type == "إجازة زواج") { $stmt = $con->prepare("UPDATE employees SET status = 1 WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); if (!$stmt->execute()) { throw new Exception("خطأ أثناء تحديث حالة الموظف."); } $stmt->close(); } // تأكيد المعاملة mysqli_commit($con); // إعادة التوجيه (بديل لـ redirect) header("Location: show_vacation.php?id=$emp_id&success=" . urlencode("تمت إضافة إجازة الموظف بنجاح")); exit; } catch (Exception $e) { // إلغاء المعاملة mysqli_rollback($con); // إعادة التوجيه مع رسالة خطأ header("Location: create_vacation.php?error=" . urlencode($e->getMessage())); exit; } } ?> يمكنك مراجعة الاجابات السابقة لانه قمت بشرح الدوال كاملاً
    1 نقطة
  9. <?php namespace App\Http\Controllers; use Carbon\Carbon; use App\Models\Log; use App\Models\File; use App\Models\Employee; use App\Models\Vacation; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; class VacationController extends Controller { function __construct() { $this->middleware('permission:vacation-list', ['only' => ['index','show','search']]); $this->middleware('permission:vacation-create', ['only' => ['create','createAll','store']]); $this->middleware('permission:vacation-edit', ['only' => ['edit','update','endVecation']]); $this->middleware('permission:vacation-delete', ['only' => ['destroy']]); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $vacations = Vacation::paginate(25); return view('admin.Vacation.index',compact('vacations')); } public function print(Request $request) { $vacations = Vacation::all(); return view('admin.Vacation.print', compact('vacations')); } function calculateVacationBalance($startDate, $usedDays) { $start = Carbon::parse($startDate); $now = Carbon::now(); $totalAccruedDays = 0; // ضبط تاريخ البداية ليتوافق مع أول فترة نصف سنوية بعد التاريخ المحدد if ($start->month > 6) { $start->month(1)->addYear()->day(1); // الانتقال إلى 1 يناير من العام التالي } elseif ($start->month < 6 || ($start->month == 6 && $start->day > 1)) { $start->month(6)->day(1); // الانتقال إلى 1 يونيو من نفس العام } else if ($start->month == 1 && $start->day > 1) { $start->month(6)->day(1); // إذا كان بعد 1 يناير، ننتقل إلى 1 يونيو } // حساب عدد الفترات نصف السنوية المؤهلة حتى الآن while ($start->lessThanOrEqualTo($now)) { $totalAccruedDays += 15; // إضافة 15 يوم لكل فترة نصف سنوية $start->addMonths(6); // الانتقال إلى الفترة نصف السنوية التالية } $totalAccruedDays -= $usedDays; // طرح الأيام المستخدمة return $totalAccruedDays; } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create($id) { $employee = Employee::find($id); $date = Carbon::createFromFormat('Y-m-d', $employee->start_date); $date = $date->addYear(); $date = $date->toDateString(); if($employee->vacations){ $vacationBalance = $this->calculateVacationBalance($date, $employee->vacations->where('accept', true)->sum("days")); }else{ $vacationBalance = $this->calculateVacationBalance($date, 0); } return view('admin.Vacation.create',compact('employee','vacationBalance')); } public function createAll() { $employees = Employee::where('startout_data', NULL)->get(); return view('admin.Vacation.createAll',compact('employees')); } public function endVecation($id) { $vac = Vacation::find($id); if($vac->start_date == $vac->end_date){ $vac->end_date = now()->format('Y-m-d'); $vac->days = now()->diffInDays($vac->start_date); $vac->update(); return redirect()->back()->with('success','تم إنهاء الإجازة بنجاح'); }else{ return redirect()->back()->with('error','عذرآ هذا الإجراء غير مسموح به حاليآ'); } } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request,$id) { request()->validate( [ 'type' => "required", 'start_date' => "required", 'end_date' => 'required', ], [ 'type.required' => 'يجب تحديد نوع الاجازة', 'start_date.required' => 'يجب إدخال تاريخ بداية الإجازة', 'end_date.required' => 'يجب ادخال تاريخ المباشرة', ]); DB::beginTransaction(); try { $vac = new Vacation; if($id == 0){ $emp = Employee::find(request('emp_id')); }else{ $emp = Employee::find($id); } if(Vacation::where([['emp_id', $emp->id],['accept', false]])->exists()){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن هنالك أجازة قيد الاجراء للموظف الحالي الرجاء التحقق'); } if(!request('years') && !request('months') && !request('days')){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن يجب تعبئة إحدي الخانات علي الاقل (السنوات ,الاشهر ,الايام)'); } if(request('type') == "إجازة وضع" && $emp->gender == 1 && $emp->status == 1){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن لا يمكن أعطاء هذا النوع من الاجازة للموظف المختار'); } if(request('type') == "إجازة زواج" && $emp->vacations()->where("type", "إجازة زواج")->count() != 0 && $emp->status == 0 ){ DB::rollback(); return redirect()->back()->with('error','عذرآ الموظف المختار قد تحصل علي أجاة زواج مسبقآ'); } $vac->emp_id = $emp->id; $vac->type = request('type'); if(request('type') == "إجازة سنوية"){ $vac->days = request('days'); $date = Carbon::createFromFormat('Y-m-d', $emp->start_date); $date = $date->addYear(); $date = $date->toDateString(); if($emp->vacations){ $vacationBalance = $this->calculateVacationBalance($date, $emp->vacations->where('accept', true)->sum("days")); }else{ $vacationBalance = $this->calculateVacationBalance($date, 0); } if($vacationBalance < $vac->days){ DB::rollback(); return redirect()->back()->with('error','عذرآ لايمكن أنشاء إجازة وذلك لعدم توفر الرصيد الكافي...'); } }elseif(request('type') == "إجازة بدون مرتب" && !$request->has('person')){ $vac->days = 365; }else{ $vac->days = NULL; } $vac->created_id = auth()->user()->id; $start_date = request('start_date'); $vac->start_date = $start_date; $end_date = request('end_date'); $vac->end_date = $end_date; if($request->has('person')){ $vac->companion = true; }else{ $vac->companion = false; } if($request->has('approve')){ $vac->accept = true; } $vac->reason = request('reason'); $vac->save(); if (request()->hasFile('files')) { $files = request()->file('files'); // Get the files $finalArray = []; foreach ($files as $file) { // Use foreach for simpler syntax $fileName = time() . '.' . $file->getClientOriginalExtension(); $file->storeAs('VACATION', $fileName, 'public'); // Store the file $filePath = 'VACATION/' . $fileName; // Generate the file path $finalArray[] = [ 'type' => 'vacation', 'procedure_id' => $vac->id, 'path' => $filePath, ]; } if (!empty($finalArray)) { File::insert($finalArray); // Insert the file references } } $log = new Log; $log->user_id = auth()->user()->id; $log->type = 7; $log->emp_id = $emp->id; $log->title = " اضافة إجازة جديدة (".request('type').")"; $log->log = " تمت إضافة إجازة جديدة (".request('type').")"; $log->save(); if(request('type') =="إجازة زواج") { $emp->status=1; $emp->save(); } DB::commit(); return redirect()->route('vacations.show',[$emp->id])->with('success','تــمــت إضــافــة إجــازة الــموظــف بــنــجــاح'); // all good } catch (\Exception $e) { DB::rollback(); return redirect()->back()->with('error', 'للاسف حدث خطأ ما الرجاء اعادة المحاولة'); } } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $employee = Employee::find($id); $vacations = Vacation::where('emp_id', $id)->paginate(20); $date = Carbon::createFromFormat('Y-m-d', $employee->start_date); $date = $date->addYear(); $date = $date->toDateString(); if($employee->vacations){ $vacationBalance = $this->calculateVacationBalance($date, $employee->vacations->where('accept', true)->sum("days")); }else{ $vacationBalance = $this->calculateVacationBalance($date, 0); } return view('admin.Vacation.show',compact('employee','vacations','vacationBalance')); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $vac = Vacation::find($id); return view('admin.Vacation.edit',compact('vac')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request) { DB::beginTransaction(); try { $vac = Vacation::find(request('id')); $vac->accept = true; $vac->update(); if (request()->hasFile('files')) { $files = request()->file('files'); // Get the files $finalArray = []; foreach ($files as $file) { // Use foreach for simpler syntax $fileName = time() . '.' . $file->getClientOriginalExtension(); $file->storeAs('VACATION', $fileName, 'public'); // Store the file $filePath = 'VACATION/' . $fileName; // Generate the file path $finalArray[] = [ 'type' => 'vacation', 'procedure_id' => $vac->id, 'path' => $filePath, ]; } if (!empty($finalArray)) { File::insert($finalArray); // Insert the file references } } $log = new Log; $log->user_id = auth()->user()->id; $log->type = 7; $log->emp_id = $vac->emp_id; $log->title = " الموافقة علي الإجازة (".request('type').")"; $log->log = " تمت الموافقة علي الإجازة (".request('type').")"; $log->save(); DB::commit(); return redirect()->back()->with('success','تــمــت الــمـوافــقـة عـلـي إجــازة الــموظــف بــنــجــاح'); // all good } catch (\Exception $e) { DB::rollback(); return redirect()->back()->with('error', 'للاسف حدث خطأ ما الرجاء اعادة المحاولة'); } } public function destroy($id) { DB::beginTransaction(); try { $files = File::where('procedure_id', $id) ->where('type', 'vacation') ->update(['delete_at'=> now()]); $abs = Vacation::find($id); $abs->delete_at = now(); $abs->delete(); $log = new Log; $log->user_id = auth()->user()->id; $log->type = 11; $log->emp_id = $abs->emp_id; $log->title = " حذف بيانات إجــازة (".$abs->type.")"; $log->log = " تم حذف بيانات إجــازة (".$abs->type.")"; $log->save(); DB::commit(); return redirect()->back()->with('success','تـم حـذفـ إجــازة الـمـوظـف بـنـجـاح'); // all good } catch (\Exception $e) { DB::rollback(); return redirect()->back()->with('error', 'للاسف حدث خطأ ما الرجاء اعادة المحاولة'); } } } انا اريد عمل كود مثله لحفظ اجازة موظف انا حاولت فيه لكن هل هو صحيح لماذا لم يحفظ بيانات ممكن تعدل عليه ليصبح مثله if ($_SERVER["REQUEST_METHOD"] == "POST") { $emp_id = $_POST['emp_id']; // يتم تخزين 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'); } if (empty($start_date) || empty($end_date)) { echo "يرجى اختيار تاريخ بداية وتاريخ نهاية."; exit(); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $gender = $row['gender']; } if ($type == "اجازة وضع" && $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(); } } if ($type == "اجازة سنوية") { $startDate = new DateTime($start_date); $endDate = new DateTime($end_date); $interval = $startDate->diff($endDate); $daysDiff = $interval->days+1; //عدد ايام بين تاريخ بداية اجازة وتاريخ نهاية اجازة $stmt = $con->prepare("SELECT * FROM employees WHERE person_id= ?"); //جلب تاريخ مباشرة موظف $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $s_date = new DateTime($row['start_date']); $s_date->modify('+1 year'); $s_date->format('Y-m-d'); } $stmt = $con->prepare("SELECT SUM(days) as total_days FROM vacations WHERE emp_id = ? AND accept = 1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $used_days = $row['total_days'] ? $row['total_days'] : 0; $vacation_balance = calculateVacationBalance($s_date, $used_days); if ($vacation_balance < $daysDiff) { echo "عذرًا، لا يمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي."; exit(); } } elseif($type == "اجازة بدون راتب") { $days = 365; } else { $days = NULL; } $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; $stmt = $con->prepare("INSERT INTO vacations (emp_id, type, days, start_date, end_date, reason, companion, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("isisssis", $emp_id, $type, $daysDiff, $start_date, $end_date, $reason, $companion, $created_at); if (!$stmt->execute()) { echo "خطأ أثناء إنشاء الإجازة."; exit(); } else { echo "تم إنشاء الإجازة بنجاح."; } كودي لايخزن عدد ايام لماذا
    1 نقطة
  10. مرحباً ، يجب إرفاق الكود كامل الذي تحاول ان تقوم بتحويله الى php pure حتى نقوم بشرحه كاملاً مرة واحدة.
    1 نقطة
  11. public function store(Request $request,$id) { request()->validate( [ 'type' => "required", 'start_date' => "required", 'end_date' => 'required', ], [ 'type.required' => 'يجب تحديد نوع الاجازة', 'start_date.required' => 'يجب إدخال تاريخ بداية الإجازة', 'end_date.required' => 'يجب ادخال تاريخ المباشرة', ]); DB::beginTransaction(); try { $vac = new Vacation; if($id == 0){ $emp = Employee::find(request('emp_id')); }else{ $emp = Employee::find($id); } if(Vacation::where([['emp_id', $emp->id],['accept', false]])->exists()){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن هنالك أجازة قيد الاجراء للموظف الحالي الرجاء التحقق'); } if(!request('years') && !request('months') && !request('days')){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن يجب تعبئة إحدي الخانات علي الاقل (السنوات ,الاشهر ,الايام)'); } if(request('type') == "إجازة وضع" && $emp->gender == 1 && $emp->status == 1){ DB::rollback(); return redirect()->back()->with('error','عذرآ ولكن لا يمكن أعطاء هذا النوع من الاجازة للموظف المختار'); } if(request('type') == "إجازة زواج" && $emp->vacations()->where("type", "إجازة زواج")->count() != 0 && $emp->status == 0 ){ DB::rollback(); return redirect()->back()->with('error','عذرآ الموظف المختار قد تحصل علي أجاة زواج مسبقآ'); } $vac->emp_id = $emp->id; $vac->type = request('type'); if(request('type') == "إجازة سنوية"){ $vac->days = request('days'); $date = Carbon::createFromFormat('Y-m-d', $emp->start_date); $date = $date->addYear(); $date = $date->toDateString(); if($emp->vacations){ $vacationBalance = $this->calculateVacationBalance($date, $emp->vacations->where('accept', true)->sum("days")); }else{ $vacationBalance = $this->calculateVacationBalance($date, 0); } if($vacationBalance < $vac->days){ DB::rollback(); return redirect()->back()->with('error','عذرآ لايمكن أنشاء إجازة وذلك لعدم توفر الرصيد الكافي...'); } }elseif(request('type') == "إجازة بدون مرتب" && !$request->has('person')){ $vac->days = 365; }else{ $vac->days = NULL; } $vac->created_id = auth()->user()->id; $start_date = request('start_date'); $vac->start_date = $start_date; $end_date = request('end_date'); $vac->end_date = $end_date; if($request->has('person')){ $vac->companion = true; }else{ $vac->companion = false; } if($request->has('approve')){ $vac->accept = true; } $vac->reason = request('reason'); $vac->save(); if (request()->hasFile('files')) { $files = request()->file('files'); // Get the files $finalArray = []; foreach ($files as $file) { // Use foreach for simpler syntax $fileName = time() . '.' . $file->getClientOriginalExtension(); $file->storeAs('VACATION', $fileName, 'public'); // Store the file $filePath = 'VACATION/' . $fileName; // Generate the file path $finalArray[] = [ 'type' => 'vacation', 'procedure_id' => $vac->id, 'path' => $filePath, ]; } if (!empty($finalArray)) { File::insert($finalArray); // Insert the file references } } $log = new Log; $log->user_id = auth()->user()->id; $log->type = 7; $log->emp_id = $emp->id; $log->title = " اضافة إجازة جديدة (".request('type').")"; $log->log = " تمت إضافة إجازة جديدة (".request('type').")"; $log->save(); اخي هذا كود دالة قمت بتحويله لي php pure بدون جزئية logs
    1 نقطة
  12. هادي دالة function calculateVacationBalance($startDate, $usedDays) { $start = new DateTime($startDate); $now = new DateTime(); $totalAccruedDays = 0; if ($start->format('n') > 6) { $start->setDate($start->format('Y') + 1, 1, 1); } elseif ($start->format('n') < 6 || ($start->format('n') == 6 && $start->format('j') > 1)) { $start->setDate($start->format('Y'), 6, 1); } elseif ($start->format('n') == 1 && $start->format('j') > 1) { $start->setDate($start->format('Y'), 6, 1); } while ($start <= $now) { $totalAccruedDays =$totalAccruedDays+ 15; $start->modify('+6 months'); } $totalAccruedDays =$totalAccruedDays- $usedDays; return $totalAccruedDays; }
    1 نقطة
  13. ليس كذلك، فلا يتم إنشاء نسخة كاملة من بايثون، بل نسخ الملفات الأساسية فقط الخاصة بمُفسر اللغة وهي الملفات التنفيذية python.exe و pip ومجلد lib/ الذي يحتوي على بنية لتثبيت الحزم الخاصة بالبيئة، وذلك في مجلد البيئة الإفتراضية. ولكن المُفسر في البيئة الإفتراضية يٌشير إلى المُفسر الأصلي المُثبت على النظام أي يقوم بتشغيله هو وليس مُفسر مختلف، الإختلاف هو ضبط مسار البيئة الافتراضية لكي تكون نشطة وتثبيت الحزم بها بدلاً من تثبيتها في النطاق العام. لذا المكتبات المُضمنة في اللغة كـ os، sys وغيرهم لا تُنسخ، بل تُستخدم من تثبيت بايثون الأصلي لتوفير المساحة. أما Docker فهو أمر مختلف تمامًا، الترجمة الحرفية هي حاوية وبالتبعية الأمر أشبه بحجرة مغلقة معزولة تمامًا وتضع بداخلها كل ما تريد لتشغيل المشروع بغض النظر عن نوع نظام التشغيل، طالما Docker مثبت على النظام تستطيع تشغيل الحاوية والتي بها المشروع كما هو تمامًا على جميع الأجهزة ولن يختلف شيء من جهاز لآخر. وذلك له فوائد كثيرة ستجد تفصيلها هنا:
    1 نقطة
  14. بخصوص السؤال الأول . الموارد هنا المقصود بها هو تنزيل المكتبات من الإنترنت وحذف الملفات في كل مرة تريد تحديث أو تغير إصدار مكتبة . وأيضا لا يتم إستهلاك الموارد ما دام المشروع مغلق ولم يتم تشغيله إذا تنزيل نسختين من اللغة أو المكتبة لن يستهلك أى موارد ما دام المشروع لا يعمل . وأيضا يجب الإنتباه إلى أنه ليس من الضروري أن يكون نسختين من اللغة ولكن السبب الرئيسي من البيئة الإفتراضية هو المكتبات . حيث كل مشروع له الإصدارات الخاصة بالمكتبات ولهذا إذا تم تنزيل مكتبات مختلفة سيحدث تضارب بينها . لنقل مثلا أن لدينا مكتبة إصدار 1x وتلك المكتبة تعتمد على مكتبة أخرى لها إصدار 1y . ولكننا قمنا بتنزيل مشروع أخر يعتمد على إصدار 2y . إذا هنا المشروع الأول ستحدث به مشاكل لأنه تم تغير إصدار1y إلى 2y . وهكذا ستحدث مشاكل كثيرة لك في المشاريع . ولهذا فإن فصل البيئات يساعد في فصل كل مشروع بالمكتبات الخاصة به ولذلك تحديث أو تعديل أى مكتبة في بيئة إفتراضية ما لن يغير أى شئ في البيئات الأخرى. بخصوص السؤال الثاني لنفهم أولا ما هو Docker : هو نظام حاويات (Containers) يستخدم لتشغيل التطبيقات في بيئات معزولة تماما ومحمولة فمثلا لو لدي مشروع يعمل لدي ولكن حينما أقوم بإرساله لك لا يعمل لديك وهذا بسبب إختلاف الحزم والبرامج وإعدادات الجهاز لديك مما يسبب مشاكل في تشغيل المشروع عند كل شخص . ولهذا فإن Docker يعتمد على ما يسمى Docker Image (الصورة) وهو مثل "قالب جاهز" يحتوي على التطبيق (المشروع) مع مكتباته مع إعداداته الخاصة مثل نظام تشغيل Ubuntu وإصدار معين من بايثون مع قاعدة بيانات MySQL. وهنا لو لديك مشروع بايثون فبدلا من تنزيل بايثون مع قوراعد البيانات على كل جهاز تقوم فقط بكتابة Dockerfile لإنشاء صورة تحتوي على كل شيء جاهز وبمجرد فقط إرسال هذا الملف إلى أى شخص وتشغيله سيتم تحميل المشروع مع النظام مع جميع البرامج بجميع الإعدادات والإصدارات المناسبة تلقائيا دون الحاجةإلى تنزيل كل برنامج بشكل منفصل وإختلاف إصدار كل برنامج وتعارضات مع البرامج الموجودة في الجهاز وغيرها. فمثلا لو لديك مشروع بايثون 3.13 ولكن الشخص الأخر الذي أرسلت له المشروع لديه بايثون 3.10 مثلا هنا سيتوجب عليه حذف 3.10 وتنزيل 3.13 أو تنزيلهم معا والذي من الممكن أن يسبب مشاكل . ولكن من خلال docker يتم إنشاء حاوية كاملة لنظام كما لو أنك أنشأت نظام تشغيل جديد لديك ووضعت به البرامج . إذا docker هو مخصص أكثر لبيئة العمل الكاملة من نظام تشغيل مع برامج مع مكتبات مع مشروع . أما البيئة الإفتراضية فهي مخصصة فقط لعزل المكتبات الخاصة بالمشروع.
    1 نقطة
  15. لا تكن حبيس أفكارك، ما تقوم به غير عملي وغير واقعي، فحتى الشركات الكبيرة لا تقوم بما تفعله، أحيانًا كثيرة يتم نشر ميزة ليست كاملة وبها أخطاء ويتم إصلاحها بعد النشر. المهم هو إخراج نتيجة بجودة مقبولة ثم التحسين، فلو لاقت قبول ومفيدة فعلاً يتم تطويرها لتجنب إضاعة الوقت والمجهود في أمر لا عائد منه عند إختباره في الواقع. وعامًة المشكلة شائعة جداً جداً بين المبرمجين، خصوصاً في البدايات، ويسمى شلل التحليل Analysis Paralysis أو السعي للكمال المضر. اعتمد منهجية MVP وابدأ دائماً بأبسط نسخة تعمل وتحقق الهدف الأساسي المطلوب، ولديك الهدف الأساسي هو إدخال بيانات لتقرير واحد بطريقة ثابتة ربما اجعل ذلك يعمل أولاً، أي ركز على أن يعمل الكود بشكل صحيح مبدئياً، حتى لو كان غير أنيق أو غير قابل للتوسع بسهولة وبعد أن يعمل، تستطيع العودة لتحسينه وعمل Refactoring، وجعله يتعامل مع حالات أكثر تعقيداً. وبدلاً من التفكير في المشروع ككتلة واحدة ضخمة تتطلب حلاً مثالياً لكل شيء، قسّمه إلى مهام صغيرة جداً يمكن إنجازها في فترة قصيرة. وستواجهك مشكلة ماذا لو؟ فقم بكتابة ما تفكر به جانبياً وامضِ قدماً، بأي طريقة تريدها تحت عنوان تحسينات مستقبلية أو مشاكل محتملة، ثم انسَها في الوقت الحالي وركز على المهمة التي بين يديك وستتعامل مع ذلك لاحقاً عندما يحين وقتها.
    1 نقطة
  16. قبل كتابة الكود، اكتب المتطلبات الأساسية للمشروع في قائمة مثل واجهة ديناميكية، إدخال بيانات، تصدير إلى Excel و من ثم حدد الأولويات (ما الذي يجب إكماله أولاً) و استخدم أدوات مثل Trello أو ورقة وقلم لتتبع التقدم. أما بخصوص المشكلة التطبيق هل لو سمحت تخبرني ما هي اللغة المستخدمة و كود المشكلة ؟
    1 نقطة
×
×
  • أضف...