templates/account_entreprise/manage.html.twig line 1

  1. {% extends 'base.html.twig' %}
  2. {% block title %}Gérer les entreprises de {{ user.name ?? user.email }}{% endblock %}
  3. {% block bodyContent %}
  4.     <div class="container-fluid py-3">
  5.         {# Back link #}
  6.         <div class="mb-3">
  7.             <a href="{{ path('admin_accounts_index') }}" class="btn btn-link btn-sm px-0">
  8.                 <i class="mdi mdi-arrow-left"></i>
  9.                 Retour à la liste des comptes
  10.             </a>
  11.         </div>
  12.         {# Page header #}
  13.         <div class="card border-0 rounded-4 shadow-sm mb-3">
  14.             <div class="card-body d-flex align-items-center justify-content-between flex-wrap gap-2">
  15.                 <div class="d-flex align-items-center gap-3">
  16.                     <div class="rounded-circle bg-primary text-white d-flex align-items-center justify-content-center"
  17.                          style="width:44px; height:44px; font-weight:600;">
  18.                         {{ (user.name ?? user.email)|slice(0,1)|upper }}
  19.                     </div>
  20.                     <div>
  21.                         <h1 class="h5 mb-1">Gestion des entreprises de l’utilisateur</h1>
  22.                         <div class="text-muted small">
  23.                             <span class="fw-semibold">{{ user.name ?? user.email }}</span>
  24.                             <span class="mx-1">·</span>
  25.                             <span class="text-muted">ID #{{ user.id }}</span>
  26.                         </div>
  27.                     </div>
  28.                 </div>
  29.                 {% if user.entreprise %}
  30.                     <div class="text-end">
  31.                         <div class="small text-muted">Entreprise actuelle</div>
  32.                         <div class="fw-semibold">
  33.                             {{ user.entreprise.name ?? user.entreprise.libelle ?? 'Sans nom' }}
  34.                         </div>
  35.                     </div>
  36.                 {% endif %}
  37.             </div>
  38.         </div>
  39.         <div class="row g-3">
  40.             {# LEFT: Linked entreprises #}
  41.             <div class="col-lg-7">
  42.                 <div class="card rounded-4 shadow-sm h-100">
  43.                     <div class="card-header bg-white mt-3 border-0 pb-0 d-flex justify-content-between align-items-center">
  44.                         <div>
  45.                             <h2 class="h6 mb-1">Entreprises liées</h2>
  46.                             <p class="small text-muted mb-0">
  47.                                 Activez, désactivez ou retirez l’utilisateur des entreprises auxquelles il a accès.
  48.                             </p>
  49.                         </div>
  50.                         {% if user.userEntreprises|length > 0 %}
  51.                             <span class="badge bg-light text-muted border small">
  52.                             {{ user.userEntreprises|length }} entreprise(s)
  53.                         </span>
  54.                         {% endif %}
  55.                     </div>
  56.                     <div class="card-body">
  57.                         {% if user.userEntreprises|length > 0 %}
  58.                             <div class="list-group list-group-flush rounded-3 border">
  59.                                 {% for link in user.userEntreprises %}
  60.                                     {% set entreprise = link.entreprise %}
  61.                                     <div class="list-group-item d-flex align-items-center justify-content-between flex-wrap gap-2">
  62.                                         <div class="d-flex align-items-center">
  63.                                             {# Logo #}
  64.                                             {% if entreprise.logo ?? false %}
  65.                                                 <img src="{{ entreprise.logo }}" class="rounded me-3"
  66.                                                      style="width:40px; height:40px; object-fit:cover;">
  67.                                             {% else %}
  68.                                                 <div class="rounded-circle bg-light me-3 d-flex justify-content-center align-items-center"
  69.                                                      style="width:40px; height:40px;">
  70.                                                     <i class="mdi mdi-office-building text-muted fs-4"></i>
  71.                                                 </div>
  72.                                             {% endif %}
  73.                                             <div>
  74.                                                 <div class="fw-semibold">
  75.                                                     {{ entreprise.name ?? entreprise.libelle ?? 'Sans nom' }}
  76.                                                 </div>
  77.                                                 <div class="text-muted extra-small">
  78.                                                     Rôle : <span class="text-uppercase">{{ link.role }}</span>
  79.                                                     <span class="mx-1">·</span>
  80.                                                     Statut :
  81.                                                     {% if link.status == 'ACTIVE' %}
  82.                                                         <span class="badge bg-success-subtle text-success border">
  83.                                                         Actif
  84.                                                     </span>
  85.                                                     {% else %}
  86.                                                         <span class="badge bg-danger-subtle text-danger border">
  87.                                                         Désactivé
  88.                                                     </span>
  89.                                                     {% endif %}
  90.                                                 </div>
  91.                                                 {% if user.entreprise and user.entreprise.id == entreprise.id %}
  92.                                                     <div class="badge bg-primary-subtle text-primary border mt-1">
  93.                                                         Entreprise actuelle
  94.                                                     </div>
  95.                                                 {% endif %}
  96.                                             </div>
  97.                                         </div>
  98.                                         <div class="d-flex align-items-center gap-2">
  99.                                             {% set isCurrent = user.entreprise and user.entreprise.id == entreprise.id %}
  100.                                             {% if isCurrent %}
  101.                                                 {# No actions on current entreprise: show info only #}
  102.                                                 <span class="badge bg-primary-subtle text-primary border">
  103.                                                     Entreprise actuelle
  104.                                                 </span>
  105.                                             {% else %}
  106.                                                 {# Toggle status #}
  107.                                                 <form method="post"
  108.                                                       action="{{ path('admin_accounts_toggle_link', {id: link.id}) }}">
  109.                                                     <input type="hidden" name="_token"
  110.                                                            value="{{ csrf_token('admin_toggle_link_' ~ link.id) }}">
  111.                                                     <button type="submit"
  112.                                                             class="btn btn-sm {{ link.status == 'ACTIVE' ? 'btn-outline-warning' : 'btn-outline-success' }} rounded-pill">
  113.                                                         {% if link.status == 'ACTIVE' %}
  114.                                                             Désactiver
  115.                                                         {% else %}
  116.                                                             Activer
  117.                                                         {% endif %}
  118.                                                     </button>
  119.                                                 </form>
  120.                                                 {# Remove link #}
  121.                                                 <form method="post"
  122.                                                       action="{{ path('admin_accounts_remove_link', {id: link.id}) }}"
  123.                                                       onsubmit="return confirm('Retirer cet utilisateur de cette entreprise ?');">
  124.                                                     <input type="hidden" name="_token"
  125.                                                            value="{{ csrf_token('admin_remove_link_' ~ link.id) }}">
  126.                                                     <button type="submit"
  127.                                                             class="btn btn-sm btn-outline-danger rounded-pill">
  128.                                                         Retirer
  129.                                                     </button>
  130.                                                 </form>
  131.                                             {% endif %}
  132.                                         </div>
  133.                                     </div>
  134.                                 {% endfor %}
  135.                             </div>
  136.                         {% else %}
  137.                             <div class="text-center text-muted small py-4">
  138.                                 Cet utilisateur n’est lié à aucune entreprise pour le moment.
  139.                             </div>
  140.                         {% endif %}
  141.                     </div>
  142.                 </div>
  143.             </div>
  144.             {# RIGHT: Add entreprise #}
  145.             <div class="col-lg-5">
  146.                 <div class="card rounded-4 shadow-sm h-100">
  147.                     <div class="card-header bg-white border-0 pb-0 mt-3">
  148.                         <h2 class="h6 mb-1">Lier une nouvelle entreprise</h2>
  149.                         <p class="small text-muted mb-0">
  150.                             Sélectionnez une entreprise existante et définissez le rôle de l’utilisateur.
  151.                         </p>
  152.                     </div>
  153.                     <div class="card-body">
  154.                         <form method="post" action="{{ path('admin_accounts_add_entreprise', {id: user.id}) }}">
  155.                             <input type="hidden" name="_token"
  156.                                    value="{{ csrf_token('admin_add_entreprise_' ~ user.id) }}">
  157.                             <div class="mb-3">
  158.                                 <label class="form-label small fw-semibold">
  159.                                     <i class="mdi mdi-office-building-outline me-1"></i>Entreprise
  160.                                 </label>
  161.                                 <select name="entreprise_id" class="form-select form-select-sm rounded-3" required>
  162.                                     <option value="">— Sélectionner une entreprise —</option>
  163.                                     {% for entreprise in entreprises %}
  164.                                         <option value="{{ entreprise.id }}">
  165.                                             {{ entreprise.name ?? entreprise.libelle ?? ('Entreprise #' ~ entreprise.id) }}
  166.                                         </option>
  167.                                     {% endfor %}
  168.                                 </select>
  169.                             </div>
  170.                             <div class="mb-3">
  171.                                 <label class="form-label small fw-semibold">
  172.                                     <i class="mdi mdi-shield-account-outline me-1"></i>Rôle de l’utilisateur
  173.                                 </label>
  174.                                 <select name="role" class="form-select form-select-sm rounded-3">
  175.                                     <option value="OWNER">Propriétaire / Admin</option>
  176.                                     <option value="MANAGER">Gestionnaire</option>
  177.                                     <option value="STAFF">Staff</option>
  178.                                     <option value="MEMBRE" selected>Membre</option>
  179.                                 </select>
  180.                                 <div class="form-text small">
  181.                                     Le rôle détermine les permissions de cet utilisateur dans l’entreprise sélectionnée.
  182.                                 </div>
  183.                             </div>
  184.                             <button type="submit"
  185.                                     class="btn btn-primary btn-sm rounded-pill px-3">
  186.                                 Ajouter à l’entreprise
  187.                             </button>
  188.                         </form>
  189.                     </div>
  190.                 </div>
  191.             </div>
  192.         </div>
  193.     </div>
  194. {% endblock %}