EGYADMIN commited on
Commit
9c24953
·
verified ·
1 Parent(s): 0cc2458

Create web/pages/local_content.py

Browse files
Files changed (1) hide show
  1. web/pages/local_content.py +247 -1
web/pages/local_content.py CHANGED
@@ -321,4 +321,250 @@ def show_local_content_calculator():
321
  if labor_local_percentage < 70:
322
  recommendations.append("زيادة نسبة العمالة المحلية من خلال التوظيف المباشر أو التعاقد مع شركات محلية.")
323
 
324
- if materials_
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
  if labor_local_percentage < 70:
322
  recommendations.append("زيادة نسبة العمالة المحلية من خلال التوظيف المباشر أو التعاقد مع شركات محلية.")
323
 
324
+ if materials_local_percentage < 50:
325
+ recommendations.append("زيادة نسبة المواد المحلية من خلال البحث عن موردين محليين أو استبدال المواد المستوردة بمواد محلية.")
326
+
327
+ if services_local_percentage < 60:
328
+ recommendations.append("الاعتماد بشكل أكبر على مقدمي الخدمات المحليين والاستعانة بالشركات الوطنية.")
329
+
330
+ if equipment_local_percentage < 30:
331
+ recommendations.append("محاولة استئجار المعدات من مصادر محلية بدلاً من شرائها من الخارج.")
332
+
333
+ for i, rec in enumerate(recommendations):
334
+ st.markdown(f"{i+1}. {rec}")
335
+
336
+ if not recommendations:
337
+ st.markdown("يمكن تحسين النسبة من خلال إعادة توزيع مكونات المشروع وزيادة الاعتماد على المصادر المحلية.")
338
+
339
+ def show_local_vendors():
340
+ """
341
+ عرض الموردين المحليين
342
+ """
343
+ st.markdown("## قاعدة بيانات الموردين المحليين")
344
+
345
+ # إنشاء بيانات توضيحية للموردين
346
+ vendors_data = {
347
+ "اسم المورد": [
348
+ "شركة الصناعات السعودية",
349
+ "مؤسسة الخليج للمقاولات",
350
+ "شركة الرياض للإنشاءات",
351
+ "الشركة العربية للمعدات",
352
+ "مصنع المنتجات الإسمنتية",
353
+ "شركة تقنيات البناء",
354
+ "مؤسسة المدار للتوريدات",
355
+ "شركة البنية التحتية المتكاملة",
356
+ "مصنع الصلب السعودي",
357
+ "شركة الأنابيب الوطنية"
358
+ ],
359
+ "القطاع": [
360
+ "صناعة", "مقاولات", "إنشاءات", "معدات", "مواد بناء",
361
+ "تقنيات بناء", "توريدات", "بنية تحتية", "صناعات معدنية", "أنابيب"
362
+ ],
363
+ "المنطقة": [
364
+ "الرياض", "الشرقية", "مكة المكرمة", "المدينة المنورة", "القصيم",
365
+ "الشرقية", "الرياض", "جدة", "ينبع", "الجبيل"
366
+ ],
367
+ "تصنيف نطاقات": [
368
+ "بلاتيني", "أخضر مرتفع", "أخضر متوسط", "بلاتيني", "أخضر مرتفع",
369
+ "أخضر متوسط", "أخضر منخفض", "بلاتيني", "أخضر مرتفع", "أخضر متوسط"
370
+ ],
371
+ "نسبة السعودة (%)": [
372
+ 65, 42, 35, 55, 38, 30, 25, 60, 45, 40
373
+ ],
374
+ "التقييم": [
375
+ 4.8, 4.2, 3.9, 4.6, 4.0, 3.7, 3.5, 4.5, 4.3, 4.1
376
+ ]
377
+ }
378
+
379
+ vendors_df = pd.DataFrame(vendors_data)
380
+
381
+ # البحث في قاعدة البيانات
382
+ st.markdown("### البحث في قاعدة بيانات الموردين")
383
+
384
+ col1, col2, col3 = st.columns(3)
385
+
386
+ with col1:
387
+ search_name = st.text_input("البحث باسم المورد", "")
388
+
389
+ with col2:
390
+ selected_sector = st.selectbox(
391
+ "القطاع",
392
+ ["الكل"] + sorted(vendors_df["القطاع"].unique().tolist())
393
+ )
394
+
395
+ with col3:
396
+ selected_region = st.selectbox(
397
+ "المنطقة",
398
+ ["الكل"] + sorted(vendors_df["المنطقة"].unique().tolist())
399
+ )
400
+
401
+ # تطبيق التصفية
402
+ filtered_df = vendors_df.copy()
403
+
404
+ if search_name:
405
+ filtered_df = filtered_df[filtered_df["اسم المورد"].str.contains(search_name, case=False)]
406
+
407
+ if selected_sector != "الكل":
408
+ filtered_df = filtered_df[filtered_df["القطاع"] == selected_sector]
409
+
410
+ if selected_region != "الكل":
411
+ filtered_df = filtered_df[filtered_df["المنطقة"] == selected_region]
412
+
413
+ # عرض نتائج البحث
414
+ st.markdown(f"### نتائج البحث ({len(filtered_df)} مورد)")
415
+ st.dataframe(filtered_df, use_container_width=True)
416
+
417
+ # عرض إحصائيات الموردين
418
+ st.markdown("### إحصائيات الموردين المحليين")
419
+
420
+ col1, col2 = st.columns(2)
421
+
422
+ with col1:
423
+ # توزيع الموردين حسب المنطقة
424
+ region_counts = vendors_df["المنطقة"].value_counts().reset_index()
425
+ region_counts.columns = ["المنطقة", "عدد الموردين"]
426
+
427
+ fig1 = px.pie(
428
+ region_counts,
429
+ values="عدد الموردين",
430
+ names="المنطقة",
431
+ title="توزيع الموردين حسب المنطقة",
432
+ color_discrete_sequence=px.colors.qualitative.Bold
433
+ )
434
+
435
+ fig1.update_traces(textposition="inside", textinfo="percent+label")
436
+
437
+ st.plotly_chart(fig1, use_container_width=True)
438
+
439
+ with col2:
440
+ # توزيع الموردين حسب تصنيف نطاقات
441
+ nitaqat_counts = vendors_df["تصنيف نطاقات"].value_counts().reset_index()
442
+ nitaqat_counts.columns = ["تصنيف نطاقات", "عدد الموردين"]
443
+
444
+ # ترتيب تصنيف نطاقات
445
+ nitaqat_order = {"بلاتيني": 1, "أخضر مرتفع": 2, "أخضر متوسط": 3, "أخضر منخفض": 4, "أصفر": 5, "أحمر": 6}
446
+ nitaqat_counts["الترتيب"] = nitaqat_counts["تصنيف نطاقات"].map(nitaqat_order)
447
+ nitaqat_counts = nitaqat_counts.sort_values("الترتيب")
448
+
449
+ # اختيار الألوان حسب التصنيف
450
+ nitaqat_colors = {
451
+ "بلاتيني": "#7B68EE", "أخضر مرتفع": "#228B22", "أخضر متوسط": "#32CD32",
452
+ "أخضر منخفض": "#90EE90", "أصفر": "#FFD700", "أحمر": "#FF4500"
453
+ }
454
+
455
+ fig2 = px.bar(
456
+ nitaqat_counts,
457
+ x="تصنيف نطاقات",
458
+ y="عدد الموردين",
459
+ color="تصنيف نطاقات",
460
+ color_discrete_map=nitaqat_colors,
461
+ title="توزيع الموردين حسب تصنيف نطاقات"
462
+ )
463
+
464
+ st.plotly_chart(fig2, use_container_width=True)
465
+
466
+ # قسم إضافة مورد جديد
467
+ st.markdown("### إضافة مورد جديد")
468
+
469
+ with st.expander("إضافة مورد جديد إلى قاعدة البيانات"):
470
+ col1, col2 = st.columns(2)
471
+
472
+ with col1:
473
+ new_vendor_name = st.text_input("اسم المورد")
474
+ new_vendor_sector = st.selectbox("القطاع", sorted(vendors_df["القطاع"].unique().tolist()))
475
+ new_vendor_region = st.selectbox("المنطقة", sorted(vendors_df["المنطقة"].unique().tolist()))
476
+
477
+ with col2:
478
+ new_vendor_nitaqat = st.selectbox(
479
+ "تصنيف نطاقات",
480
+ ["بلاتيني", "أخضر مرتفع", "أخضر متوسط", "أخضر منخفض", "أصفر", "أحمر"]
481
+ )
482
+ new_vendor_saudization = st.slider("نسبة السعودة (%)", 0, 100, 30)
483
+ new_vendor_rating = st.slider("التقييم", 1.0, 5.0, 3.5, 0.1)
484
+
485
+ if st.button("إضافة المورد"):
486
+ st.success(f"تم إضافة المورد {new_vendor_name} بنجاح!")
487
+
488
+ def show_vision_requirements():
489
+ """
490
+ عرض متطلبات رؤية 2030
491
+ """
492
+ st.markdown("## متطلبات المحتوى المحلي في رؤية السعودية 2030")
493
+
494
+ # نص توضيحي
495
+ st.markdown("""
496
+ تعد زيادة المحتوى المحلي أحد الأهداف الاستراتيجية الرئيسية لرؤية السعودية 2030، وذلك من خلال:
497
+
498
+ - تعزيز المحتوى المحلي في المشتريات الحكومية
499
+ - دعم الصناعات الوطنية والمنتجات المحلية
500
+ - توطين الوظائف والتقنيات
501
+ - تطوير سلاسل الإمداد المحلية
502
+ - تعزيز المشاركة والاستثمار من القطاع الخاص
503
+ """)
504
+
505
+ # الأهداف الرئيسية
506
+ st.markdown("### الأهداف الرئيسية للمحتوى المحلي في رؤية 2030")
507
+
508
+ goals_data = {
509
+ "المؤشر": [
510
+ "نسبة المحتوى المحلي في القطاع غير النفطي",
511
+ "نسبة الإنفاق المحلي في المشتريات الحكومية",
512
+ "نسبة توطين الوظائف في القطاع الخاص",
513
+ "عدد المنشآت الصغيرة والمتوسطة المشاركة في سلاسل الإمداد",
514
+ "نسبة مساهمة المنشآت الصغيرة والمتوسطة في الناتج المحلي"
515
+ ],
516
+ "الوضع الحالي": [35, 45, 26, 1200, 22],
517
+ "المستهدف 2025": [50, 60, 35, 3000, 30],
518
+ "المستهدف 2030": [70, 80, 60, 5000, 35]
519
+ }
520
+
521
+ goals_df = pd.DataFrame(goals_data)
522
+
523
+ st.table(goals_df)
524
+
525
+ # رسم بياني للأهداف
526
+ fig = go.Figure()
527
+
528
+ fig.add_trace(go.Bar(
529
+ x=goals_df["المؤشر"],
530
+ y=goals_df["الوضع الحالي"],
531
+ name="الوضع الحالي",
532
+ marker_color='#1976D2'
533
+ ))
534
+
535
+ fig.add_trace(go.Bar(
536
+ x=goals_df["المؤشر"],
537
+ y=goals_df["المستهدف 2025"],
538
+ name="المستهدف 2025",
539
+ marker_color='#FFC107'
540
+ ))
541
+
542
+ fig.add_trace(go.Bar(
543
+ x=goals_df["المؤشر"],
544
+ y=goals_df["المستهدف 2030"],
545
+ name="المستهدف 2030",
546
+ marker_color='#43A047'
547
+ ))
548
+
549
+ fig.update_layout(
550
+ title="مؤشرات المحتوى المحلي في رؤية 2030",
551
+ xaxis_title="المؤشر",
552
+ yaxis_title="القيمة (%)",
553
+ barmode='group',
554
+ legend=dict(
555
+ orientation="h",
556
+ yanchor="bottom",
557
+ y=1.02,
558
+ xanchor="right",
559
+ x=1
560
+ )
561
+ )
562
+
563
+ st.plotly_chart(fig, use_container_width=True)
564
+
565
+ # متطلبات المحتوى المحلي حسب القطاع
566
+ st.markdown("### متطلبات المحتوى المحلي حسب القطاع")
567
+
568
+ sectors_data = {
569
+ "القطاع": ["النفط والغاز", "الكهرباء", "المياه", "الاتصالات", "النقل", "البناء والتشييد", "التعليم", "الصحة"],
570
+ "الحد الأدنى للم