Twig\Error\RuntimeError {#1471 -lineno: 77 -name: "base.html.twig" -rawMessage: "Impossible to access an attribute ("allowedContract") on a null variable." -sourcePath: "/profiles/k/kf/kfr/kfrbmadoaba2/stride2.aba.vg/templates/base.html.twig" -sourceCode: """ \r\n \r\n <!DOCTYPE html>\r\n <html>\r\n <head>\r\n <meta charset="utf-8">\r\n <meta name="viewport" content="width=device-width, initial-scale=1">\r\n <title>Stride | {% block title %}{% endblock %}</title>\r\n <link rel="apple-touch-icon" sizes="76x76" href="/img/logo.png" />\r\n <!-- Google Font: Source Sans Pro -->\r\n <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">\r\n <!-- Font Awesome -->\r\n <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />\r\n <!-- Ionicons -->\r\n <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">\r\n <!-- Tempusdominus Bootstrap 4 -->\r\n <link rel="stylesheet" href="/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">\r\n <!-- iCheck -->\r\n <link rel="stylesheet" href="/plugins/icheck-bootstrap/icheck-bootstrap.min.css">\r\n <!-- JQVMap -->\r\n <link rel="stylesheet" href="/plugins/jqvmap/jqvmap.min.css">\r\n <!-- Theme style -->\r\n <link rel="stylesheet" href="/css/adminlte.css">\r\n <!-- overlayScrollbars -->\r\n <link rel="stylesheet" href="/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">\r\n <!--favicon-->\r\n <link rel="icon" href="/img/logo.png" type="image/x-icon">\r\n <!-- Daterange picker -->\r\n <link rel="stylesheet" href="/plugins/daterangepicker/daterangepicker.css">\r\n <!-- summernote -->\r\n <link rel="stylesheet" href="/plugins/summernote/summernote-bs4.min.css">\r\n <!-- fav-icon -->\r\n <link rel="icon" href="/img/logo.png" type="image/x-icon">\r\n <!-- jQuery -->\r\n <script src="/plugins/jquery/jquery.min.js"></script>\r\n \r\n <link rel="stylesheet" href="/css/bootstrap-select.min.css">\r\n \r\n <!-- Latest compiled and minified JavaScript -->\r\n <script src="/js/bootstrap-select.min.js"></script>\r\n \r\n <link href="/plugins/flex/jquery.flexdatalist.min.css" rel="stylesheet" type="text/css">\r\n <script src="/plugins/flex/jquery.flexdatalist.min.js"></script>\r\n \r\n <!-- Signature Modal CSS -->\r\n <link rel="stylesheet" href="/css/signature-modal.css">\r\n \r\n <!-- Print Styles -->\r\n <link rel="stylesheet" href="/css/print.css">\r\n </head>\r\n <body class="hold-transition sidebar-mini layout-fixed">\r\n <div class="wrapper">\r\n <!-- Preloader -->\r\n <div class="preloader flex-column justify-content-center align-items-center">\r\n <img class="animation__shake" src="/img/logo.png" alt="STRIDELOGO" height="120" width="150">\r\n </div>\r\n <!-- Navbar -->\r\n <nav class="main-header navbar navbar-expand navbar-white navbar-light">\r\n <!-- Left navbar links -->\r\n <ul dir="rtl" class="navbar-nav">\r\n \r\n <!-- Notifications Dropdown Menu -->\r\n <li class="nav-item">\r\n <a class="nav-link" data-widget="fullscreen" href="#" role="button">\r\n <i class="fas fa-expand-arrows-alt"></i>\r\n </a>\r\n </li>\r\n \r\n {% if is_granted('ROLE_PROVIDER') and app.user.serviceProvider is not null %}\r\n <li class="nav-item">\r\n <a class="nav-link" href="{{ path('app_service_provider_my_profile') }}" role="button" title="ملفي الشخصي">\r\n <i class="fas fa-user-circle"></i>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n {% if app.user.allowedContract is not null %}\r\n <li class="nav-item">\r\n <a class="nav-link" href="{{ path('app_contracts_my_profile') }}" role="button" title="ملف التعاقد الخاص بي">\r\n <i class="fas fa-file-contract"></i>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n <li class="nav-item">\r\n <a class="nav-link" href="#" role="button" data-toggle="modal" data-target="#changePasswordModal" title="تغيير كلمة المرور">\r\n <i class="fas fa-key"></i>\r\n </a>\r\n </li>\r\n \r\n <li class="nav-item">\r\n <a class="nav-link" href="{{ path('app_logout') }}" role="button">\r\n <i class="fas fa-sign-out-alt"></i>\r\n </a>\r\n </li>\r\n \r\n \r\n </ul>\r\n \r\n <!-- Right navbar links -->\r\n <ul class="navbar-nav ml-auto">\r\n \r\n <li class="nav-item">\r\n <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>\r\n </li>\r\n </ul>\r\n </nav>\r\n <!-- /.navbar -->\r\n <!-- Main Sidebar Container -->\r\n <aside class="main-sidebar sidebar-dark-primary elevation-4">\r\n <!-- Brand Logo -->\r\n <a href="{{ path('app_panel') }}" class="brand-link">\r\n \r\n {% if file_exists(logo_dir ~ '/logo.png') %}\r\n <img src='{{ abs_logo_dir ~ '/logo.png' }}' alt="Logo" class="brand-image img-circle elevation-3" style="opacity: .8">\r\n {% else %}\r\n <img src="/img/logo.png" alt="Logo" class="brand-image img-circle elevation-3" style="opacity: .8">\r\n {% endif %}\r\n </a>\r\n <!-- Sidebar -->\r\n <div class="sidebar">\r\n <!-- Sidebar user panel (optional) -->\r\n <div class="user-panel text-center">\r\n </div>\r\n <!-- Sidebar Menu -->\r\n {% set currentPage = page_active|default('dashboard') %}\r\n <nav class="mt-2">\r\n <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">\r\n <!-- Add icons to the links using the .nav-icon class\r\n with font-awesome or any other icon font library -->\r\n {% if is_granted('ROLE_CASE_PROFILE') %}\r\n {# Show only case profiles navigation for case_profile role #}\r\n <li class="nav-item">\r\n <a href="{{ path('app_case_profile_index') }}" class="nav-link {{ currentPage is same as('caseProfiles') ? 'active' : '' }}">\r\n <i class="fa-solid fa-users"></i>\r\n <p> الحالات </p>\r\n </a>\r\n </li>\r\n \r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_user_complaint_index') }}" class='nav-link {{ currentPage is same as('userComplaints') ? 'active' : '' }}'>\r\n <i class="fa-solid fa-ticket"></i>\r\n <p class="text-right"> شكاواي و مقترحاتي </p>\r\n </a>\r\n </li>\r\n \r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_article_index') }}" class='nav-link {{ currentPage is same as('articles') ? 'active' : '' }}'>\r\n <i class="fa-solid fa-book-open"></i>\r\n <p> المواد التثقيفية </p>\r\n </a>\r\n </li>\r\n {% else %}\r\n {# Show all navigation items for other roles #}\r\n <li class="nav-item ">\r\n <a href="{{ is_granted('ROLE_CHARITY') ? path('app_panel_charity_dashboard') : path('app_panel') }}" class="nav-link {{ currentPage is same as('dashboard') ? 'active' : '' }}">\r\n <i class="nav-icon fas fa-tachometer-alt"></i>\r\n <p> لوحة تحكم <span> STRIDE </span>\r\n </p>\r\n </a>\r\n </li>\r\n {% if is_granted('ROLE_ADMIN') and not (is_granted('ROLE_PROVIDER') or is_granted('ROLE_CHARITY'))%}\r\n <li class="nav-item">\r\n <a href="{{ path('app_settings') }}" class="nav-link {{ currentPage is same as('settings') ? 'active' : '' }}">\r\n <i class="fa-solid fa-sliders"></i>\r\n <p> الاعدادات </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_service_index') }}" class="nav-link {{ currentPage is same as('services') ? 'active' : '' }}">\r\n <i class="fa-solid fa-hand-holding-heart"></i>\r\n <p> الخدمات و الأجهزة </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_service_provider_index') }}" class="nav-link {{ currentPage is same as('serviceProvider') ? 'active' : '' }}">\r\n <i class="fa-solid fa-chalkboard-user"></i>\r\n <p> إدارة العاملين </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_contracts_index') }}" class="nav-link {{ currentPage is same as('contracts') ? 'active' : '' }}">\r\n <i class="fa-solid fa-handshake-angle"></i>\r\n <p> ادارة التعاقدات </p>\r\n </a>\r\n </li>\r\n \r\n {% endif %}\r\n \r\n {# CRM - العملاء المحتملين #}\r\n {% if is_granted('ROLE_ADMIN') and not (is_granted('ROLE_PROVIDER') or is_granted('ROLE_CHARITY')) %}\r\n <li class="nav-item">\r\n <a href="{{ path('app_lead_index') }}" class="nav-link {{ currentPage is same as('leads') ? 'active' : '' }}">\r\n <i class="fa-solid fa-user-plus"></i>\r\n <p> CRM العملاء المحتملين </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_case_profile_index') }}" class="nav-link {{ currentPage is same as('caseProfiles') ? 'active' : '' }}">\r\n <i class="fa-solid fa-users"></i>\r\n <p> الحالات </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n {% if not is_granted('ROLE_CASE_PROFILE') %}\r\n {# Show remaining navigation items only for non-case_profile users #}\r\n {% if not is_granted('ROLE_CASE_PROFILE') and not is_granted('ROLE_PROVIDER') and not is_granted('ROLE_CHARITY') %}\r\n <li dir="rtl" class="nav-item">\r\n <a href="{{ path('app_case_reservation_index') }}" class="nav-link {{ currentPage is same as('caseReservations') ? 'active' : '' }}">\r\n <i class="nav-icon far fa-calendar-alt"></i>\r\n <p> الحجوزات\r\n </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n {% if not (is_granted('ROLE_PROVIDER')) and not is_granted('ROLE_CHARITY') %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_case_payment_index') }}" class="nav-link {{ currentPage is same as('casePayments') ? 'active' : '' }}">\r\n <i class="fa-solid fa-calculator"></i>\r\n <p> مدفوعات الحالات </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_case_reservation_timeline') }}" class="nav-link {{ currentPage is same as('reservationsTimeLine') ? 'active' : '' }}">\r\n <i class="fa-solid fa-user-pen"></i>\r\n <p> جدول الاعمل </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_expense_index') }}" class="nav-link {{ currentPage is same as('expenses') ? 'active' : '' }}">\r\n <i class="fa-solid fa-wallet"></i>\r\n <p> المصروفات </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="#" class="nav-link">\r\n <i class="fa-solid fa-receipt"></i>\r\n <p> التقارير </p>\r\n </a>\r\n <ul class="nav nav-treeview">\r\n <li class="nav-item">\r\n <a href="{{ path('app_reports_debitors') }}" class='nav-link'>\r\n <i class="fa-solid fa-hospital-user"></i>\r\n <p class="text-right"> تقرير الديون </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_reports_creditors') }}" class='nav-link'>\r\n <i class="fa-solid fa-hospital-user"></i>\r\n <p class="text-right"> تقرير الرصيد </p>\r\n </a>\r\n </li>\r\n \r\n {% if is_granted('ROLE_ADMIN') and not app.user.adminDisableGeneralReport %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_reports_general') }}" class='nav-link'>\r\n <i class="fa-regular fa-calendar-plus"></i>\r\n <p class="text-right"> تقارير العام </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n {% if is_granted('ROLE_ADMIN') and not app.user.adminDisableSalaries %}\r\n <li class="nav-item">\r\n <a href="{{ path('app_reports_salaries') }}" class='nav-link'>\r\n <i class="fa-solid fa-user-nurse"></i>\r\n <p class="text-right"> تقرير المرتبات </p>\r\n </a>\r\n </li>\r\n \r\n {% endif %}\r\n \r\n {% if is_granted('ROLE_ADMIN') %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_reports_revenues') }}" class='nav-link'>\r\n <i class="ion ion-stats-bars"></i>\r\n <p class="text-right"> تقرير الميزانية </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n </ul>\r\n </li>\r\n \r\n \r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_case_cases_birthdays') }}" class="nav-link {{ currentPage is same as('birthdays') ? 'active' : '' }}">\r\n <i class="fa-solid fa-cake-candles"></i>\r\n <p> اعياد ميلاد الحالات </p>\r\n </a>\r\n </li>\r\n {% if is_granted('ROLE_ADMIN') and not app.user.adminDisableUsers %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_user_index') }}" class="nav-link {{ currentPage is same as('users') ? 'active' : '' }}">\r\n <i class="fa-solid fa-user"></i>\r\n <p> المستخدون </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_decision_todo') }}" class="nav-link {{ currentPage is same as('decisions') ? 'active' : '' }}">\r\n <i class="fa-solid fa-bars"></i>\r\n <p> Decisions To-Do </p>\r\n </a>\r\n </li>\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_progs_bank_index') }}" class="nav-link {{ currentPage is same as('programs') ? 'active' : '' }}">\r\n <i class="fa-solid fa-pills"></i>\r\n <p> Programs </p>\r\n </a>\r\n </li>\r\n \r\n {% endif %}\r\n \r\n {% if not is_granted('ROLE_CASE_PROFILE') and not is_granted('ROLE_PROVIDER') and not is_granted('ROLE_CHARITY') %}\r\n <li class="nav-item">\r\n <a href="{{ path('app_ai_prompts_index') }}" class="nav-link {{ currentPage is same as('programs') ? 'active' : '' }}">\r\n <i class="fa-solid fa-robot"></i>\r\n <p> A.I </p>\r\n </a>\r\n </li>\r\n <li class="nav-item">\r\n <a href="{{ path('app_packages_index') }}" class="nav-link {{ currentPage is same as('packages') ? 'active' : '' }}">\r\n <i>%</i>\r\n <p> الباقات و العروض </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n {% if is_granted('ROLE_ADMIN') %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_reports_sp') }}" class='nav-link {{ currentPage is same as('spReport') ? 'active' : '' }}'>\r\n <i class="ion ion-stats-bars"></i>\r\n <p class="text-right"> تقرير مقدم الخدمة </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n \r\n {% if not is_granted('ROLE_CASE_PROFILE') and not is_granted('ROLE_PROVIDER') %}\r\n <!--<li class="nav-item">\r\n <a href="{{ path('app_feedbacks_index') }}" class='nav-link {{ currentPage is same as('spReport') ? 'active' : '' }}'>\r\n <i class="fa-solid fa-comment"></i>\r\n <p class="text-right"> الشكاوي و المقترحات </p>\r\n </a>\r\n </li> -->\r\n {% endif %}\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_user_complaint_index') }}" class='nav-link {{ currentPage is same as('userComplaints') ? 'active' : '' }}'>\r\n <i class="fa-solid fa-ticket"></i>\r\n <p class="text-right"> شكاواي و مقترحاتي </p>\r\n </a>\r\n </li>\r\n \r\n <li class="nav-item">\r\n <a href="{{ path('app_article_index') }}" class='nav-link {{ currentPage is same as('articles') ? 'active' : '' }}'>\r\n <i class="fa-solid fa-book-open"></i>\r\n <p class="text-right"> المواد التثقيفية </p>\r\n </a>\r\n </li>\r\n {% endif %}\r\n </ul>\r\n </nav>\r\n <!-- /.sidebar-menu -->\r\n </div>\r\n <!-- /.sidebar -->\r\n </aside>\r\n <!-- Content Wrapper. Contains page content -->\r\n <div class="content-wrapper">\r\n \r\n {# ── Article notification banner ── #}\r\n {% if app.user %}\r\n {% set unseen_articles = app.user | article_unseen_notifications %}\r\n {% if unseen_articles is not empty %}\r\n <div class="alert alert-warning alert-dismissible m-3" dir="rtl" role="alert">\r\n <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>\r\n <h5><i class="icon fas fa-bell"></i> مواد تثقيفية جديدة</h5>\r\n لديك <strong>{{ unseen_articles|length }}</strong> مادة تثقيفية لم تطلع عليها بعد:\r\n <ul class="mb-0 mt-1">\r\n {% for art in unseen_articles %}\r\n <li>\r\n <a href="{{ path('app_article_show', {id: art.id}) }}" class="text-dark font-weight-bold">\r\n {{ art.title }}\r\n </a>\r\n </li>\r\n {% endfor %}\r\n </ul>\r\n </div>\r\n {% endif %}\r\n {% endif %}\r\n \r\n <!-- /.content-header -->\r\n <section class="content">\r\n <div class="container-fluid">\r\n {% block body %}{% endblock %}\r\n </div><!-- /.container-fluid -->\r\n </section>\r\n </div>\r\n <!-- /.Left col -->\r\n <!-- right col (We are only adding the ID to make the widgets sortable)-->\r\n <section class="col-lg-5 connectedSortable">\r\n <!-- Map card -->\r\n <div class="card bg-gradient-primary">\r\n <div class="card-header border-0">\r\n <h3 class="card-title">\r\n <i class="fas fa-map-marker-alt mr-1"></i> Visitors\r\n </h3>\r\n <!-- card tools -->\r\n <div class="card-tools">\r\n <button type="button" class="btn btn-primary btn-sm daterange" title="Date range">\r\n <i class="far fa-calendar-alt"></i>\r\n </button>\r\n <button type="button" class="btn btn-primary btn-sm" data-card-widget="collapse" title="Collapse">\r\n <i class="fas fa-minus"></i>\r\n </button>\r\n </div>\r\n <!-- /.card-tools -->\r\n </div>\r\n <div class="card-body">\r\n <div id="world-map" style="height: 250px; width: 100%;"></div>\r\n </div>\r\n <!-- /.card-body-->\r\n <div class="card-footer bg-transparent">\r\n <div class="row">\r\n <div class="col-4 text-center">\r\n <div id="sparkline-1"></div>\r\n <div class="text-white">Visitors</div>\r\n </div>\r\n <!-- ./col -->\r\n <div class="col-4 text-center">\r\n <div id="sparkline-2"></div>\r\n <div class="text-white">Online</div>\r\n </div>\r\n <!-- ./col -->\r\n <div class="col-4 text-center">\r\n <div id="sparkline-3"></div>\r\n <div class="text-white">Sales</div>\r\n </div>\r\n <!-- ./col -->\r\n </div>\r\n <!-- /.row -->\r\n </div>\r\n </div>\r\n <!-- /.card -->\r\n </section>\r\n <!-- right col -->\r\n </div>\r\n <!-- /.row (main row) -->\r\n </div>\r\n <!-- /.container-fluid -->\r\n </section>\r\n <!-- /.content -->\r\n </div>\r\n <!-- /.content-wrapper -->\r\n <footer class="main-footer text-center">\r\n <strong>Copyright © 2024 <a href="https://vertex-soft.com">VERTEX SOFT</a>. </strong> All rights reserved.\r\n </footer>\r\n <!-- Control Sidebar -->\r\n <aside class="control-sidebar control-sidebar-dark">\r\n <!-- Control sidebar content goes here -->\r\n </aside>\r\n <!-- /.control-sidebar -->\r\n </div>\r\n <!-- ./wrapper -->\r\n \r\n {# Include Signature Modal - Available globally #}\r\n {% include 'signature_modal.html.twig' %}\r\n \r\n {# Include Change Password Modal - Available globally #}\r\n {% include 'change_password_modal.html.twig' %}\r\n \r\n <!-- jQuery UI 1.11.4 -->\r\n <script src="/plugins/jquery-ui/jquery-ui.min.js"></script>\r\n <!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->\r\n <script>\r\n $.widget.bridge('uibutton', $.ui.button)\r\n </script>\r\n <!-- Bootstrap 4 -->\r\n <script src="/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>\r\n <!-- ChartJS -->\r\n <script src="/plugins/chart.js/Chart.min.js"></script>\r\n <!-- Sparkline -->\r\n <script src="/plugins/sparklines/sparkline.js"></script>\r\n <!-- JQVMap -->\r\n <script src="/plugins/jqvmap/jquery.vmap.min.js"></script>\r\n <script src="/plugins/jqvmap/maps/jquery.vmap.usa.js"></script>\r\n <!-- jQuery Knob Chart -->\r\n <script src="/plugins/jquery-knob/jquery.knob.min.js"></script>\r\n <!-- daterangepicker -->\r\n <script src="/plugins/moment/moment.min.js"></script>\r\n <script src="/plugins/daterangepicker/daterangepicker.js"></script>\r\n <!-- Tempusdominus Bootstrap 4 -->\r\n <script src="/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>\r\n <!-- Summernote -->\r\n <script src="/plugins/summernote/summernote-bs4.min.js"></script>\r\n <!-- overlayScrollbars -->\r\n <script src="/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>\r\n <!-- AdminLTE App -->\r\n \r\n <script src="/plugins/datatables/jquery.dataTables.min.js"></script>\r\n <script src="/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js"></script>\r\n <script src="/plugins/datatables-responsive/js/dataTables.responsive.min.js"></script>\r\n <script src="/plugins/datatables-responsive/js/responsive.bootstrap4.min.js"></script>\r\n <script src="/plugins/datatables-buttons/js/dataTables.buttons.min.js"></script>\r\n <script src="/plugins/datatables-buttons/js/buttons.bootstrap4.min.js"></script>\r\n <script src="/plugins/jszip/jszip.min.js"></script>\r\n <script src="/plugins/pdfmake/pdfmake.min.js"></script>\r\n <script src="/plugins/pdfmake/vfs_fonts.js"></script>\r\n <script src="/plugins/datatables-buttons/js/buttons.html5.min.js"></script>\r\n <script src="/plugins/datatables-buttons/js/buttons.print.min.js"></script>\r\n <script src="/plugins/datatables-buttons/js/buttons.colVis.min.js"></script>\r\n <script src="/js/adminlte.js"></script>\r\n \r\n \r\n <script>\r\n $(document).ready(function(){\r\n \r\n \r\n let dtb;\r\n \r\n function refreshDatatable(){\r\n try {\r\n dtb = $("#dataTable").DataTable({\r\n "responsive": true,\r\n "lengthChange": false,\r\n "autoWidth": false,\r\n "searching": true,\r\n "paging": true,\r\n "info": false,\r\n "ordering": false,\r\n 'pageLength': 50,\r\n "buttons": [\r\n { extend: 'excel', className: 'btn btn-lg' },\r\n { extend: 'print', className: 'btn btn-lg' ,\r\n customize: function (win) {\r\n $(win.document.body)\r\n .css('font-size', '14pt')\r\n ;\r\n $(win.document.body).find('table th, table td').css({\r\n "border":"1px solid #000",\r\n "padding": "0.5em"\r\n })\r\n }},\r\n ]\r\n }).buttons().container().appendTo('#tableActions')\r\n .css('text-center');\r\n \r\n $('#dataTable_wrapper div').first().remove()\r\n } catch (e) {\r\n \r\n }\r\n }\r\n refreshDatatable();\r\n \r\n $('.flexdatalist').flexdatalist({\r\n minLength: 0,\r\n valueProperty: 'value',\r\n selectionRequired: false,\r\n searchDelay: 100\r\n });\r\n \r\n $('[data-toggle="tooltip"]').tooltip()\r\n \r\n $('select').selectpicker({\r\n liveSearch: true,\r\n actionsBox: true,\r\n dropdownAlignRight: 'auto',\r\n noneSelectedText: 'لم يتم الأختيار',\r\n });\r\n \r\n }\r\n );\r\n \r\n /*$(document).ready(function(){\r\n var hash = window.location.hash;\r\n \r\n $(".nav-tabs").find("li a").each(function(key, value) {\r\n if (hash === $(value).attr('href')) {\r\n $(value).tab('show');\r\n }\r\n \r\n $(value).click(function() {\r\n location.hash = $(this).attr('href');\r\n });\r\n });\r\n \r\n \r\n })*/\r\n \r\n \r\n $(document).ready(function() {\r\n // Handle main tabs\r\n var mainHash = window.location.hash;\r\n \r\n // Check if hash is for a main tab\r\n $(".nav-tabs").find("li a").each(function() {\r\n if (mainHash === $(this).attr('href')) {\r\n $(this).tab('show');\r\n \r\n // If this is the assessments tab, check for sub-tab\r\n if (mainHash === '#tab-assesments') {\r\n setTimeout(function() {\r\n restoreSubTab();\r\n }, 100); // Small delay to ensure tab is shown\r\n }\r\n }\r\n \r\n $(this).click(function() {\r\n location.hash = $(this).attr('href');\r\n });\r\n });\r\n \r\n // Handle sub-tabs within assessments\r\n $('#pills-tab').find('button[data-toggle="pill"]').each(function() {\r\n $(this).on('shown.bs.tab', function(e) {\r\n // Store last active sub-tab in localStorage\r\n localStorage.setItem('lastAssessmentsSubTab', $(e.target).attr('data-target'));\r\n });\r\n });\r\n \r\n // Function to restore sub-tab\r\n function restoreSubTab() {\r\n var lastSubTab = localStorage.getItem('lastAssessmentsSubTab');\r\n if (lastSubTab) {\r\n var subTabButton = $('#pills-tab').find('button[data-target="' + lastSubTab + '"]');\r\n if (subTabButton.length) {\r\n subTabButton.tab('show');\r\n }\r\n }\r\n }\r\n \r\n if (mainHash === '#tab-assesments') {\r\n restoreSubTab();\r\n }\r\n \r\n // Handle browser back/forward for tabs\r\n $(window).on('hashchange', function() {\r\n var newHash = window.location.hash;\r\n $(".nav-tabs").find("li a").each(function() {\r\n if (newHash === $(this).attr('href')) {\r\n $(this).tab('show');\r\n \r\n // Special handling for assessments tab\r\n if (newHash === '#tab-assesments') {\r\n setTimeout(function() {\r\n restoreSubTab();\r\n }, 100);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n \r\n $('.copy-data').on('click', function (){\r\n navigator.clipboard.writeText($(this).data('copy'));\r\n alert('copied');\r\n })\r\n \r\n </script>\r\n \r\n <!-- Signature Pad Library -->\r\n <script src="https://cdn.jsdelivr.net/npm/signature_pad@4.0.0/dist/signature_pad.umd.min.js"></script>\r\n \r\n <!-- Signature Modal Handler -->\r\n <script src="/js/signature-modal.js"></script>\r\n \r\n <!-- Change Password Modal Handler -->\r\n <script>\r\n $(document).ready(function() {\r\n $('#changePasswordForm').on('submit', function(e) {\r\n e.preventDefault();\r\n \r\n // Hide previous alerts\r\n $('#passwordErrorAlert').hide();\r\n $('#passwordSuccessAlert').hide();\r\n \r\n // Get form data\r\n var formData = $(this).serialize();\r\n \r\n // Submit via AJAX\r\n $.ajax({\r\n url: $(this).attr('action'),\r\n method: 'POST',\r\n data: formData,\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.success) {\r\n $('#passwordSuccessAlert').text(response.message).show();\r\n $('#passwordErrorAlert').hide();\r\n // Clear form fields\r\n $('#changePasswordForm')[0].reset();\r\n // Close modal after 2 seconds\r\n setTimeout(function() {\r\n $('#changePasswordModal').modal('hide');\r\n $('#passwordSuccessAlert').hide();\r\n }, 2000);\r\n } else {\r\n $('#passwordErrorAlert').text(response.message).show();\r\n $('#passwordSuccessAlert').hide();\r\n }\r\n },\r\n error: function(xhr) {\r\n var message = 'حدث خطأ أثناء تغيير كلمة المرور';\r\n if (xhr.responseJSON && xhr.responseJSON.message) {\r\n message = xhr.responseJSON.message;\r\n }\r\n $('#passwordErrorAlert').text(message).show();\r\n $('#passwordSuccessAlert').hide();\r\n }\r\n });\r\n });\r\n \r\n // Clear alerts when modal is closed\r\n $('#changePasswordModal').on('hidden.bs.modal', function() {\r\n $('#changePasswordForm')[0].reset();\r\n $('#passwordErrorAlert').hide();\r\n $('#passwordSuccessAlert').hide();\r\n });\r\n });\r\n </script>\r\n \r\n <!-- Print Helper -->\r\n <script src="/js/print-helper.js"></script>\r\n \r\n {% block javascripts %}{% endblock %}\r\n \r\n </body>\r\n </html>\r\n """ }