<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}{{ controller_name|default('Gestion Stock') }}{% endblock %}</title>
<!-- Preload critical assets -->
<link rel="preload" href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" as="style">
<link rel="preload" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" as="style">
<!-- Favicon -->
<link href="{{ asset('image/logo_nav.png')}}" rel="icon" type="image/png">
<!-- CSS Libraries -->
<link href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/sidebars.css')}}" rel="stylesheet">
<link href="{{ asset('assets/css/portal.css') }}" rel="stylesheet">
<!-- Icon Libraries with integrity checks -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.6.1/font/bootstrap-icons.css">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous">
{% block stylesheets %}{% endblock %}
<!-- Inline Critical CSS -->
<style>
:root {
--primary: #009cde;
--primary-dark: #0077a8;
--secondary: #6c757d;
--dark: #2c3e50;
--light: #f8f9fa;
--success: #28a745;
--danger: #dc3545;
--warning: #ffc107;
--info: #17a2b8;
--navbar-height: 60px;
--transition: all 0.25s cubic-bezier(0.645, 0.045, 0.355, 1);
}
body {
padding-top: var(--navbar-height);
font-family: 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
line-height: 1.6;
color: #333;
background-color: #f5f7fa;
min-height: 100vh;
}
/* Enhanced Navbar */
.navbar {
background: linear-gradient(135deg, var(--dark) 0%, var(--primary-dark) 100%);
height: var(--navbar-height);
box-shadow: var(--shadow-lg);
padding: 0 2rem;
position: fixed;
top: 0;
width: 100%;
z-index: 1030;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.navbar-container {
max-width: 1400px;
margin: 0 auto;
padding: 0 15px;
}
.navbar-brand {
font-weight: 700;
letter-spacing: 0.5px;
display: flex;
align-items: center;
padding: 0.5rem 0;
transition: var(--transition);
}
.navbar-brand img {
height: 30px;
width: auto;
margin-right: 10px;
transition: var(--transition);
}
.navbar-brand:hover {
transform: translateY(-1px);
}
.nav-item {
position: relative;
margin: 0 2px;
}
.nav-link {
font-weight: 500;
padding: 0.75rem 1rem;
color: rgba(255,255,255,0.9) !important;
transition: var(--transition);
border-radius: 4px;
display: flex;
align-items: center;
}
.nav-link i {
margin-right: 8px;
width: 20px;
text-align: center;
}
.nav-link:hover,
.nav-link:focus,
.nav-link.active {
color: white !important;
background-color: rgba(255,255,255,0.15);
transform: translateY(-1px);
}
/* Dropdown Enhancements */
.dropdown-menu {
border: none;
box-shadow: 0 5px 20px rgba(0,0,0,0.15);
border-radius: 8px;
margin-top: 8px;
padding: 0.5rem 0;
min-width: 220px;
border-top: 3px solid var(--primary);
}
.dropdown-item {
padding: 0.6rem 1.5rem;
transition: var(--transition);
font-weight: 500;
display: flex;
align-items: center;
}
.dropdown-item i {
width: 20px;
margin-right: 10px;
color: var(--primary);
}
.dropdown-item:hover,
.dropdown-item:focus {
background-color: rgba(0, 156, 222, 0.1);
color: var(--primary);
padding-left: 1.75rem;
}
/* User Menu Specific */
.user-menu .dropdown-toggle::after {
margin-left: 0.5em;
vertical-align: 0.15em;
}
.user-menu .dropdown-menu {
left: auto !important;
right: 0 !important;
}
/* Main Content Area */
main {
padding: 2rem 0;
min-height: calc(100vh - var(--navbar-height));
}
/* Buttons & Interactive Elements */
.btn {
transition: var(--transition);
font-weight: 500;
letter-spacing: 0.5px;
}
.btn-ease {
background-color: var(--primary);
border-color: var(--primary);
border-radius: 30px;
padding: 0.5rem 1.5rem;
}
.btn-ease:hover {
background-color: var(--primary-dark);
border-color: var(--primary-dark);
transform: translateY(-2px);
box-shadow: 0 4px 15px rgba(0, 156, 222, 0.3);
}
/* Specific Button States */
.btn-download:hover {
background-color: #e0b000;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(224, 176, 0, 0.3);
}
.btn-edit:hover,
.btn-add:hover {
background-color: #0aa8c8;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(13, 202, 240, 0.3);
}
.btn-save:hover {
background-color: #5cd34b;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(124, 247, 107, 0.3);
}
.btn-cancel:hover {
background-color: #e0b000;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(224, 176, 0, 0.3);
}
/* Responsive Adjustments */
@media (max-width: 992px) {
.navbar-collapse {
background-color: var(--dark);
padding: 1rem;
margin-top: 0.5rem;
border-radius: 8px;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.nav-item {
margin: 2px 0;
}
.dropdown-menu {
margin-top: 0;
box-shadow: none;
border-left: 3px solid var(--primary);
border-top: none;
}
}
.main-wrapper {
min-height: calc(100vh - var(--navbar-height));
display: flex;
flex-direction: column;
}
main {
flex: 1;
overflow-y: auto; /* Autorise le scroll si le contenu dépasse */
padding: 2rem 0;
}
.nav-link:hover, .nav-link:focus, .nav-link {
color: #c0c5d3ff !important;
transform: translateY(-1px);
}
</style>
</head>
<body>
<!-- Navigation Bar -->
{# <header class="navbar navbar-expand-lg navbar-dark">
<div class="navbar-container container-fluid">
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') %}
<a class="navbar-brand" href="{{ path('admin')}}">
<img src="{{ asset('assets/img/bnb-bnb-logo.png') }}" alt="Logo" loading="lazy">
Espace Admin
</a>
{% else %}
<a class="navbar-brand" href="{{ path('account')}}">
<img src="{{ asset('assets/img/bnb-bnb-logo.png') }}" alt="Logo" loading="lazy">
Espace User
</a>
{% endif %}
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNavbar" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainNavbar">
<ul class="navbar-nav me-auto">
<!-- Gestion Carburant -->
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CARBURANT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="carburantDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-gas-pump"></i> Gestion Carburant
</a>
<ul class="dropdown-menu" aria-labelledby="carburantDropdown">
{% if is_granted('ROLE_ADMIN') %}
<li><a class="dropdown-item" href="{{ path('user_index')}}"><i class="fas fa-users"></i> Utilisateurs</a></li>
{% endif %}
<li><a class="dropdown-item" href="{{path('dkv_index_plus')}}"><i class="fas fa-file-excel"></i> Excel DKV</a></li>
<li><a class="dropdown-item" href="{{path('transaction_total')}}"><i class="fas fa-file-excel"></i> Excel Total</a></li>
<li><a class="dropdown-item" href="{{path('transaction_leclerc')}}"><i class="fas fa-file-excel"></i> Excel Leclerc</a></li>
<li><a class="dropdown-item" href="{{path('app_cart_total')}}"><i class="fas fa-file-excel"></i> Excel Cartes</a></li>
</ul>
</li>
{% endif %}
<!-- Gestion Client -->
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CLIENT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="clientDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-users-cog"></i> Gestion Client
</a>
<ul class="dropdown-menu" aria-labelledby="clientDropdown">
<li><a class="dropdown-item" href="{{path('ane_import_excel')}}"><i class="fas fa-file-import"></i> Excel ANE</a></li>
</ul>
</li>
{% endif %}
<!-- Gestion Factures -->
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_FACTURES') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="facturesDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-file-invoice-dollar"></i> Gestion Factures
</a>
<ul class="dropdown-menu" aria-labelledby="facturesDropdown">
<li><a class="dropdown-item" href="{{path('devis_liste')}}"><i class="fas fa-file-signature"></i> Devis</a></li>
<li><a class="dropdown-item" href="{{path('fiche_mission_index')}}"><i class="fas fa-clipboard-check"></i> Fiches Mission</a></li>
<li><a class="dropdown-item" href="{{path('facture_index')}}"><i class="fas fa-calculator"></i> Fiches calcul</a></li>
<li><a class="dropdown-item" href="{{path('facturefiche_index')}}"><i class="fas fa-file-invoice"></i> Factures</a></li>
</ul>
</li>
{% endif %}
</ul>
<!-- User Menu -->
<ul class="navbar-nav">
<li class="nav-item dropdown user-menu">
<a class="nav-link dropdown-toggle d-flex align-items-center" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-user-circle me-2"></i>
<span>{{app.user.firstname}}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
<li><a class="dropdown-item" href="{{path('account')}}"><i class="fas fa-user-cog"></i> Profil</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="{{path('app_logout')}}"><i class="fas fa-sign-out-alt"></i> Déconnexion</a></li>
</ul>
</li>
</ul>
</div>
</div>
</header> #}
<header class="navbar navbar-expand-lg navbar-dark">
{# <div class="navbar-container container-fluid"> #}
<div class="container-fluid">
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') %}
<a class="navbar-brand" href="{{ path('admin') }}">
<img src="{{ asset('assets/img/bnb-bnb-logo.png') }}" alt="Logo" loading="lazy">
Espace Admin
</a>
{% else %}
<a class="navbar-brand" href="{{ path('account') }}">
<img src="{{ asset('assets/img/bnb-bnb-logo.png') }}" alt="Logo" loading="lazy">
Espace User
</a>
{% endif %}
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNavbar" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainNavbar">
<ul class="navbar-nav me-auto">
<!-- Gestion des Cartes -->
{# {% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CARBURANT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="cartesDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-credit-card"></i> Gestion des Cartes
</a>
<ul class="dropdown-menu" aria-labelledby="cartesDropdown">
<li><a class="dropdown-item" href="{{ path('app_carte_uta') }}"><i class="fas fa-file-excel"></i> Cartes UTA</a></li>
<li><a class="dropdown-item" href="{{ path('app_cart_total') }}"><i class="fas fa-file-excel"></i> Cartes ANE + Total</a></li>
</ul>
</li>
{% endif %} #}
<!-- Gestion Carburant -->
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CARBURANT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="carburantDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-gas-pump"></i> Gestion Utilisateurs
</a>
<ul class="dropdown-menu" aria-labelledby="carburantDropdown">
{% if is_granted('ROLE_ADMIN') %}
<li><a class="dropdown-item" href="{{ path('user_index') }}"><i class="fas fa-users"></i> Utilisateurs</a></li>
{% endif %}
</ul>
</li>
{% endif %}
{# {% if is_granted('ROLE_COMMU')
or is_granted('ROLE_COMMER')
or is_granted('ROLE_ADMIN')
or is_granted('ROLE_ATELIER')
or is_granted('ROLE_GESTION_CARBURANT')
%}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="analyseDataDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-chart-line"></i> Analyse Data
</a>
<ul class="dropdown-menu" aria-labelledby="analyseDataDropdown">
<li>
<a class="dropdown-item" href="{{ path('analyse_mensuel') }}">
<i class="fas fa-chart-bar"></i> Analyse Mensuel TOTAL
</a>
</li>
<li>
<a class="dropdown-item" href="{{ path('analyse_mensuel_dkv') }}" tabindex="-1" aria-disabled="true">
<i class="fas fa-chart-bar"></i> Analyse Mensuel DKV
</a>
</li>
<li>
<a class="dropdown-item" href="{{ path('analyse_mensuel_leclerc') }}" tabindex="-1" aria-disabled="true">
<i class="fas fa-chart-bar"></i> Analyse Mensuel LECLERC
</a>
</li>
</ul>
</li>
{% endif %} #}
<!-- Gestion Client -->
{# {% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CLIENT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="clientDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-users-cog"></i> Gestion Client
</a>
<ul class="dropdown-menu" aria-labelledby="clientDropdown">
<li><a class="dropdown-item" href="{{ path('ane_import_excel') }}"><i class="fas fa-file-import"></i> Excel ANE</a></li>
</ul>
</li>
{% endif %} #}
<!-- Gestion Factures -->
{# {% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_FACTURES') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="facturesDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-file-invoice-dollar"></i> Gestion Factures
</a>
<ul class="dropdown-menu" aria-labelledby="facturesDropdown">
<li><a class="dropdown-item" href="{{ path('devis_liste') }}"><i class="fas fa-file-signature"></i> Devis</a></li>
<li><a class="dropdown-item" href="{{ path('fiche_mission_index') }}"><i class="fas fa-clipboard-check"></i> Fiches Mission</a></li>
<li><a class="dropdown-item" href="{{ path('facture_index') }}"><i class="fas fa-calculator"></i> Fiches calcul</a></li>
<li><a class="dropdown-item" href="{{ path('facturefiche_index') }}"><i class="fas fa-file-invoice"></i> Factures</a></li>
</ul>
</li>
{% endif %} #}
{# {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_GESTION_CARBURANT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="banqueDonneesDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-database"></i> Banque des données
</a>
<ul class="dropdown-menu" aria-labelledby="banqueDonneesDropdown">
<li>
<a class="dropdown-item" href="{{ path('cartes_import') }}">
<i class="fas fa-credit-card"></i> Cartes essence
</a>
</li>
</ul>
</li>
{% endif %} #}
<!-- Gestion Feuilles de Route -->
{# {% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CARBURANT') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="feuillesRouteDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-clipboard-list"></i> Feuilles de Route
</a>
<ul class="dropdown-menu" aria-labelledby="feuillesRouteDropdown">
<li><a class="dropdown-item" href="{{ path('upload_multiple') }}"><i class="fas fa-upload"></i> Télécharger feuilles</a></li>
<!-- Vous pouvez ajouter d'autres options pour le traitement par la suite -->
<li><a class="dropdown-item" href="{{ path('upload_list') }}"><i class="fas fa-eye"></i> Consulter feuilles</a></li>
<li><a class="dropdown-item" href="#"><i class="fas fa-check-circle"></i> Validation</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#"><i class="fas fa-chart-bar"></i> Statistiques</a></li>
</ul>
</li>
{% endif %} #}
{% if is_granted('ROLE_COMMU') or is_granted('ROLE_COMMER') or is_granted('ROLE_ADMIN') or is_granted('ROLE_ATELIER') or is_granted('ROLE_GESTION_CARBURANT') %}
<!-- Menu Feuilles de Route -->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="feuillesRouteDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-clipboard-list"></i> Feuilles de Route
</a>
<ul class="dropdown-menu" aria-labelledby="feuillesRouteDropdown">
<!-- Section Téléchargement -->
<li class="dropdown-header">
<i class="fas fa-upload"></i> Téléchargement
</li>
<li><a class="dropdown-item" href="{{ path('upload_multiple') }}"><i class="fas fa-file-upload"></i> Importer feuilles</a></li>
<!-- Section Consultation -->
<li class="dropdown-header">
<i class="fas fa-eye"></i> Consultation
</li>
<li><a class="dropdown-item" href="{{ path('upload_list') }}"><i class="fas fa-list"></i> Liste des feuilles</a></li>
<!-- NOUVELLES FONCTIONNALITÉS -->
<li class="dropdown-header">
<i class="fas fa-user-tie"></i> Gestion Heures
</li>
<li>
<a class="dropdown-item" href="{{ path('timesheet_index') }}">
<i class="fas fa-search"></i> Rechercher chauffeur
</a>
</li>
<li>
<a class="dropdown-item" href="{{ path('timesheet_index') }}">
<i class="fas fa-file-export"></i> Télécharger heures travail
</a>
</li>
<!-- Section Validation -->
<li class="dropdown-header">
<i class="fas fa-check-circle"></i> Validation
</li>
<li><a class="dropdown-item" href="{{ path('upload_list') }}"><i class="fas fa-check"></i> Valider feuilles</a></li>
{# <li><a class="dropdown-item" href="#"><i class="fas fa-history"></i> Historique validation</a></li> #}
<!-- Section Rapports -->
{# <li class="dropdown-header">
<i class="fas fa-chart-bar"></i> Rapports
</li>
<li><a class="dropdown-item" href="#"><i class="fas fa-chart-line"></i> Statistiques</a></li> #}
</ul>
</li>
{% endif %}
<!-- Menu Configuration (séparé) -->
{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_GESTION_HEURES') %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="configDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-cogs"></i> Configuration
</a>
<ul class="dropdown-menu" aria-labelledby="configDropdown">
<!-- Section Forfaits -->
<li class="dropdown-header">
<i class="fas fa-business-time"></i> Gestion des Forfaits
</li>
<li>
<a class="dropdown-item" href="{{ path('admin_forfait_config_index') }}">
<i class="fas fa-sliders-h"></i> Configurations Forfaits
</a>
</li>
<li>
<a class="dropdown-item" href="{{ path('admin_forfait_config_new') }}">
<i class="fas fa-plus-circle"></i> Nouvelle configuration
</a>
</li>
<!-- Section Vacations -->
<li class="dropdown-header">
<i class="fas fa-clock"></i> Valeurs Vacations
</li>
<li>
<a class="dropdown-item" href="#">
<i class="fas fa-history"></i> Historique modifications
</a>
</li>
</ul>
</li>
{% endif %}
</ul>
<!-- User Menu -->
<ul class="navbar-nav">
<li class="nav-item dropdown user-menu">
<a class="nav-link dropdown-toggle d-flex align-items-center" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-user-circle me-2"></i>
<span>{{ app.user.firstname }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
<li><a class="dropdown-item" href="{{ path('account') }}"><i class="fas fa-user-cog"></i> Profil</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="{{ path('app_logout') }}"><i class="fas fa-sign-out-alt"></i> Déconnexion</a></li>
</ul>
</li>
</ul>
</div>
</div>
</header>
<!-- Main Content -->
<main class="main-wrapper">
{% block content %}{% endblock %}
{% block body %}{% endblock %}
</main>
<!-- JavaScript Libraries -->
<script src="{{ asset('assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}" defer></script>
{% block javascripts %}{% endblock %}
</body>
</html>