لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 04/10/25 in أجوبة
-
السلام عليكم ورحمة الله وبركاته، أثناء متابعتي لمسار تعلم SQL المقدم من أكاديمية حسوب، لاحظت أنه تم شرح مجموعة من المفاهيم كما هو موضح في الصورة المرفقة، ولكنني صادفت مفاهيم أخرى مثل Index لم يتم التطرق إليها في المحتوى. لذلك، أود الاستفسار عن: هل هناك مفاهيم أخرى في SQL لم يتم شرحها في هذا المسار؟ هل هناك نية لتقديم جزء تكميلي لهذا المسار يغطي المواضيع المتقدمة؟ وإن لم يكن هناك تكملة، هل يمكن ترشيح مصادر موثوقة تساعدني على إتقان SQL بشكل احترافي؟ جزاكم الله خيرًا، وشكرًا لجهودكم.2 نقاط
-
2 نقاط
-
2 نقاط
-
السلام عليكم اعمل علي نظام شؤون موظفين كيف يتم حساب اجازة موظف بناء علي كود تالي <?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', 'للاسف حدث خطأ ما الرجاء اعادة المحاولة'); } } }1 نقطة
-
select2 مع إستخدام ال ajax كما وضحت لك . حيث تمكنك select2 من إستخدام ajax وجعل المستخدم يقوم بكتابة إسم الموظف ويتم إرسال الطلب من خلال ajax وإحضار أسماء الموظفين في الجدول والذي يتم البحث فيهم من خلالهم.1 نقطة
-
لا مشكلة، لكن ذلك مناسب لو عدد الموظفين قليل جداً أقل من 50 موظف مثلاً، بينما لو لديك مئات أو آلاف الموظفين، فإن جلبهم جميعاً من قاعدة البيانات ووضعهم في قائمة HTML منسدلة <select> سيؤدي إلى بطء شديد في تحميل الصفحة وسيتسبب في تجميد المتصفح ويصبح من الصعب جداً على المستخدم البحث عن موظف معين في قائمة طويلة جداً. الطريقة الأفضل (القائمة المنسدلة القابلة للبحث والإكمال التلقائي تستطيع البحث عن Searchable Dropdown / Autocomplete بحيث تعرض حقل إدخال يبدو كقائمة منسدلة، ولكن عندما يبدأ المستخدم بالكتابة، تُرسل طلب إلى الخادم للبحث عن الموظفين الذين يتطابقون مع ما كتبه المستخدم، ثم تُعرض النتائج فقط. وبذلك لا يتم تحميل القائمة الكاملة للموظفين، فقط النتائج المطابقة للبحث ويسهل على المستخدم العثور على الموظف المطلوب بسرعة وتعمل بشكل جيد حتى مع عدد كبير جداً من الموظفين. ويتوفر مكتبات جافاسكريبت للقيام بذلك: Select2 Choices.js Tom Select1 نقطة
-
1 نقطة
-
الحقل الموجود بتم وضع به ال id الخاص بالموظف كما يظهر في الكود يتم إستقبال id المستخدم . نعم يمكنك وضع الموظفين داخل select إذا كان العدد ليس كبيرا . أو يمكنك إستخدام select2 مع ajax لإحضار الموظفين من خلال طلب ajax حتى لا يتم جعل الكود كبيرا ووضع جميع الموظفين مباشرة في select1 نقطة
-
في صفحة اضافة اجازة اقصد هل افضل جلب جميع موظفين داخل تاق select واختيار موظف منه عن طريق استعمال مكتبة select2 javascript1 نقطة
-
1 نقطة
-
1 نقطة
-
وعليكم السلام ورحمة الله وبركاته. ستجد أن الدالة calculateVacationBalance هي المسؤولة عن حساب رصيد الأجازات المتبقي لدى الموظف . بداخل تلك الدالة المنطق يعمل كالتالي : كل موظف له 15 يوما أجازة كل 6 أشهر . ويتم طرح عدد أيام الأجازات التي أخذها من رصيده . ولاحظ في الدالة show و create هذا السطر : $date = Carbon::createFromFormat('Y-m-d', $employee->start_date); $date = $date->addYear(); هنا في السطر الثاني يتم إحتساب بدأ الأجازات بدأ من السنة التالية للتعين . أى أن أول سنة تم تعين الموظف فيها لا يتم إحتساب أى رصيد أجازات بها. فمثلا لو هناك موظف بدأ العمل في 10 مارس 2022 فإنه بعد سنة من 2022 يبدأ إضافة رصيد الإجازات له أي بدأ من 10 مارس 2023. إذا أول فترة نصف سنوية يبدأ بأخذ أجازات منها هي 1 يونيو 2023. و مثلا بما أن اليوم هو بتاريخ 10 أبريل 2025. سيتم احتساب الفترات التالية: 1 يونيو 2023 : 15 يوم 1 يناير 2024 : 15 يوم 1 يونيو 2024 : 15 يوم 1 يناير 2025 : 15 يوم إذا المجموع هو 60 يوما والرصيد المتبقي سيكون 60 - عدد الأيام التي قام بأخذها . ولكن أعتقد أنه توجد مشكلة لديك هنا . حيث الشرطين يقومان بتنفيذ نفس الكود أى بدأ الأجازات من بداية شهر 6 لنفس السنة . لذلك يجب عليك التأكد من المنطق الصحيح .1 نقطة
-
السلام عليكم ورحمه الله هل اقدر اقدم في مبادره الرواد الرقميون وأنا في السعودية ؟ خريج مؤهل متوسط ونفسي اتعلم تكلونجيا المعلومات والي عرفتو انها ملهاس شروط1 نقطة
-
انا هذا المشروع متشتت كيف ابنيه ناس تقولي ادخل دوره php و ناس تقول ادخل JavaScript وش ادخل اي دوره1 نقطة
-
وعليكم السلام ورحمة الله وبركاته . هل يمكنك توضيح أى دورة أنت مشترك بها ؟ حيث يتم شرح قواعد البيانات في معظم الدورات والشرح الموجود بها يتناسب لمحتوى الدورة نفسه . حيث أن الدورة ليست مهتمة بقواعد البيانات بأكملها وإلا فإننا سنحتاج دورة كاملة مخصصة لقواعد البيانات . ولكن يتم فقط شرح الأساسيات و الأمور المهمة التي ستحتاجها بشكل كبير في الدورة و بعد الإنتهاء منها. إن الفهارس هي بالفعل من الأمور المتقدمة التي لم يتم التطرق لها وأيضا أمور أخرى مثل التعامل مع المعاملات (Transactions) و ال Stored Procedures و Functions و Trigger (التنبيهات) وغيرها من الأمور المتقدمة جدا في قواعد البيانات وتلك الأمور ليست بالأهمية الكبيرة إلا إذا أردت أن تعمل في مجال قواعد البيانات مثل Database Developer أو مدير قواعد البيانات وهنا أنت ستحتاج إلى دورة خاصة كاملة لقواعد البيانات فقط . ويوجود على موقع الأكاديمية هنا العديد من المقالات والدروس التي تتطرق لبعض تلك الأمور وأيضا في موسوعة حسوب . https://wiki.hsoub.com/SQL#التعامل_مع_الفهارس وإليك المقالات التالية :1 نقطة
-
أنت تقصد دورة الذكاء الاصطناعي ، بالفعل لم يتم التعمق لأنّ نطاق الدورة لا يختص بتعلم SQL أو قواعد البيانات، لذا تم ذكر الأساسيات وما تحتاجه لدراسة الدورة. ستحتاج إلى التعمق من خلال البحث عن كورس في يوتيوب به تفصيل أكثر ومواضيع متقدمة، بجانب المقالات المتاحة بالأكاديمية في قسم SQL: https://academy.hsoub.com/programming/sql/ ستجد بها دروس متقدمة مثل: وتوثيق لغة SQL من موسوعة حسوب. والكتب التعليمية أيضًا:1 نقطة
-
اخي مصطفى هذا الموجود في ملف htaccess # Enable Rewrite Engine RewriteEngine On RewriteBase / # ======================= # Serve media files # ======================= RewriteCond %{REQUEST_URI} ^/media/ RewriteCond %{DOCUMENT_ROOT}/../cyberz/cyberzwebsite/cyberz_website%{REQUEST_URI} -f RewriteRule ^media/(.*)$ ../cyberz/cyberzwebsite/cyberz_website/media/$1 [L] # ======================= # Serve static files # ======================= RewriteCond %{REQUEST_URI} ^/static/ RewriteCond %{DOCUMENT_ROOT}/../cyberz/cyberzwebsite/cyberz_website%{REQUEST_URI} -f RewriteRule ^static/(.*)$ ../cyberz/cyberzwebsite/cyberz_website/static/$1 [L]1 نقطة
-
عليك تصحيح جملة UPDATE بإزالة person_id = ?, من الجزء SET. كالتالي: $sql_update_employee = "UPDATE employees SET `type` = ?, degree = ?, degree_date = ?, status = ?, due = ?, qualification = ?, start_date = ?, res_num = ?, section_id = ?, sub_section_id = ?, specialty_id = ?, bank_id = ?, branch = ?, account_num = ? WHERE person_id = ?"; ويجب وجود عمود باسم specialty_id تفقده في قاعدة البيانات. ثم تصحيح استدعاء bind_param لجدول employees باستخدم 15 متغيرًا مطابقًا لعلامات الاستفهام الـ 15 في الاستعلام السابق مع كتابة $id للمتغير الأخير الخاص بجملة WHERE. مع استخدم الأنواع الصحيحة وهي i للأرقام الصحيحة، s للسلاسل النصية، d للأرقام العشرية، تفقد أنواع الأعمدة في قاعدة البيانات أولاً ثم عدل الاستعلام التالي: $specialty_id = $_POST['specialties_id']; $sql_update_employee = "UPDATE employees SET `type` = ?, degree = ?, degree_date = ?, status = ?, due = ?, qualification = ?, start_date = ?, res_num = ?, section_id = ?, sub_section_id = ?, specialty_id = ?, bank_id = ?, branch = ?, account_num = ? WHERE person_id = ?"; $stmt_update_employee = $con->prepare($sql_update_employee); $types = "sissssssiiiissi"; // 15 حرفًا $stmt_update_employee->bind_param( $types, $type, $degree, $degree_date, $status, $due, $qualification, $start_date, $res_num, $section_id, $sub_section_id, $specialty_id, $bank_id, $branch, $account_num, $id );1 نقطة