templates/entreprise/detail_entreprise.html.twig line 1
{% extends 'base.html.twig' %}{% block title %}Marchands{% endblock %}{% block bodyContent %}<div class="content__header content__boxed rounded-0"><div class="content__wrap">{# ===== Header: breadcrumb + title + back btn ===== #}<div class="d-md-flex align-items-start justify-content-between gap-3 mb-3"><div><nav aria-label="breadcrumb"><ol class="breadcrumb mb-1"><li class="breadcrumb-item"><a href="{{ path('app_dashboard') }}">Tableau de bord</a></li><li class="breadcrumb-item"><a href="{{ path('app_entreprise') }}">Liste des bailleurs</a></li><li class="breadcrumb-item"><a href="{{ path('app_entreprise_detail', {code: entreprise.code}) }}">Détail bailleur</a></li></ol></nav><h1 class="page-title h3 fw-bold mb-0">Détail sur le bailleur</h1></div><a href="{{ path('app_entreprise') }}" class="btn btn-outline-secondary btn-sm"><i class="mdi mdi-keyboard-return"></i> Retour à la liste</a></div>{# ===== Flash messages (dismissible) ===== #}{% for message in app.session.flashBag.get('info') %}<div class="alert alert-info alert-dismissible fade show" role="alert">{{ message }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Fermer"></button></div>{% endfor %}{% for message in app.session.flashBag.get('warning') %}<div class="alert alert-warning alert-dismissible fade show" role="alert">{{ message }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Fermer"></button></div>{% endfor %}{% for message in app.session.flashBag.get('success') %}<div class="alert alert-success alert-dismissible fade show" role="alert">{{ message }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Fermer"></button></div>{% endfor %}{% for message in app.session.flashBag.get('error') %}<div class="alert alert-danger alert-dismissible fade show" role="alert">{{ message }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Fermer"></button></div>{% endfor %}</div></div><div class="content__boxed"><div class="content__wrap">{# ===== Styles (scoped) ===== #}<style>.profile-logo { width: 140px; height: 140px; object-fit: cover; }.info-icon { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 10px; }.kv { margin-bottom: .5rem; }.thead-sticky th { position: sticky; top: 0; z-index: 2; background: var(--bs-body-bg); }</style><div class="row justify-content-center mb-3"><div class="col-12 col-xl-10"><div class="card border-0 shadow-sm rounded-4"><div class="card-body p-4 p-lg-5 rounded-4">{# === Header row (name + package + status + logo) === #}<div class="row g-4 align-items-start mb-2"><div class="col-lg-8"><div class="d-flex flex-wrap align-items-center gap-2"><h2 class="h3 mb-0">{{ entreprise.name }}{% if entreprise.status %}<i class="mdi mdi-check text-success fs-5 ms-1" title="Actif"></i>{% endif %}</h2>{% if entreprise.package != null %}<span class="badge text-bg-success">{{ entreprise.package.name }}</span>{% endif %}{% if entreprise.status %}<span class="badge text-bg-success">Active</span>{% else %}<span class="badge text-bg-danger">Désactivé</span>{% endif %}</div><p class="text-muted mt-2 mb-0">Code bailleur : <span class="text-body fw-semibold">{{ entreprise.pseudo }}</span></p></div><div class="col-lg-4 text-lg-end">{% if entreprise.icon == null %}<img class="profile-logo rounded-circle border border-4"src="{{ asset('assets/img/imageIcon.png') }}" alt="Logo entreprise" loading="lazy">{% else %}<img class="profile-logo rounded-circle border border-4"src="{{ entreprise.icon }}" alt="Logo entreprise" loading="lazy">{% endif %}</div></div><hr class="my-4">{# === Info columns === #}<div class="row g-4">{# Entreprise #}<div class="col-lg-4"><h3 class="h6 text-primary mb-3">ENTREPRISE</h3><div class="d-flex align-items-start kv"><div class="info-icon bg-primary-subtle text-primary me-3"><i class="mdi mdi-office-building-outline fs-5"></i></div><div><div class="fw-semibold">{{ entreprise.name }}</div><div class="text-muted">{{ entreprise.pseudo }}</div></div></div><div class="d-flex align-items-start kv"><div class="info-icon bg-secondary-subtle text-secondary me-3"><i class="mdi mdi-map-marker-star fs-5"></i></div><address class="mb-0">{{ entreprise.adress }}<br>{{ entreprise.city }}, {{ entreprise.province }}<br>{{ entreprise.country.name }}</address></div><div class="d-flex align-items-start kv"><div class="info-icon bg-info-subtle text-info me-3"><i class="mdi mdi-file-document fs-5"></i></div><div><div class="mb-1">RCCM : <span class="fw-semibold text-body">{{ entreprise.rccm }}</span></div><div class="mb-1">ID Nat. : <span class="fw-semibold text-body">{{ entreprise.idnat }}</span></div><div>N° impôt : <span class="fw-semibold text-body">{{ entreprise.numeroimpot }}</span></div></div></div></div>{# Bailleur #}<div class="col-lg-4"><h3 class="h6 text-primary mb-3">BAILLEUR</h3><div class="d-flex align-items-start kv"><div class="info-icon bg-success-subtle text-success me-3"><i class="mdi mdi-human-male-female fs-5"></i></div><div><div class="fw-semibold">{{ bailleur.name }} {{ bailleur.lastname }}</div><div class="text-muted">{{ bailleur.email }}</div></div></div><div class="d-flex align-items-start kv"><div class="info-icon bg-secondary-subtle text-secondary me-3"><i class="mdi mdi-map-marker-star fs-5"></i></div><address class="mb-0">{{ bailleur.adress }}<br>{{ bailleur.city }}, {{ bailleur.province }}<br>{{ bailleur.country.name }}</address></div><div class="d-flex align-items-center kv"><div class="info-icon bg-warning-subtle text-warning me-3"><i class="mdi mdi-phone-check fs-5"></i></div><div class="fw-semibold text-body">{{ bailleur.phone }}</div></div></div>{# Actions #}<div class="col-lg-4"><h3 class="h6 text-primary mb-3">ACTIONS</h3><div class="d-grid gap-2 gap-lg-3"><a href="{{ path('app_entreprise_edit', {code: entreprise.code}) }}"class="btn btn-primary hstack gap-2"><i class="mdi mdi-pencil fs-5"></i><span class="vr"></span> Modifier les informations</a>{% if entreprise.status %}<a href="{{ path('app_membership', {code: entreprise.code}) }}"class="btn btn-success hstack gap-2"><i class="mdi mdi-medal fs-5"></i><span class="vr"></span> Modifier l’abonnement</a>{% else %}<a href="{{ path('app_membership', {code: entreprise.code}) }}"class="btn btn-success hstack gap-2"><i class="mdi mdi-medal-outline fs-5"></i><span class="vr"></span> Ajouter un abonnement</a>{% endif %}{% if entreprise.status %}<button class="btn btn-outline-danger hstack gap-2"onclick="unableAdmin('{{ entreprise.id }}')"data-bs-toggle="modal" data-bs-target="#modalCenter"><i class="mdi mdi-account-remove fs-5"></i><span class="vr"></span> Désactiver le compte</button>{% endif %}<a href="{{ path('app_entreprise_edit_bailleur_password', {code: entreprise.code}) }}"class="btn btn-outline-primary hstack gap-2"><i class="mdi mdi-security fs-5"></i><span class="vr"></span> Réinitialiser mot de passe bailleur</a></div></div></div></div></div></div></div>{# ===== Subscription payments ===== #}{% if subscriptionPayments|length > 0 %}<div class="row justify-content-center mt-4"><div class="col-xl-10"><div class="card border-0 shadow-sm rounded-4"><div class="card-body"><h3 class="h5 fw-bold mb-1">Factures & paiements</h3><p class="text-muted small mb-3">Historique des paiements d’abonnement</p><div class="table-responsive mt-2"><table class="table table-hover table-striped table-sm align-middle mb-0"><thead class="thead-sticky"><tr><th>Date</th><th>Référence</th><th>Tarif</th><th>Mois</th><th>Cycle</th><th>Période</th><th>Montant</th><th>Statut</th><th>Checkout</th><th>Action</th></tr></thead><tbody>{% for payment in subscriptionPayments %}{% set rawStatus = payment.status|default('PENDING') %}{% set status = rawStatus|upper %}<tr><td>{{ payment.createdAt ? payment.createdAt|date('d/m/Y H:i') : '—' }}</td><td><span class="badge text-bg-light">{{ payment.orderNumber }}</span></td><td>{{ payment.package ? payment.package.name : '—' }}</td><td>{{ payment.monthsCount|default(1) }}</td><td>{{ payment.billingCycle|default('monthly') }}</td><td>{% if payment.subscription and payment.subscription.startAt and payment.subscription.endAt %}{{ payment.subscription.startAt|date('d/m/Y') }} – {{ payment.subscription.endAt|date('d/m/Y') }}{% else %}—{% endif %}</td><td>{{ payment.amount }} {{ payment.currency|default('USD') }}</td><td>{% if status in ['APPROVED', 'SUCCESS'] %}<span class="badge text-bg-success">{{ rawStatus }}</span>{% elseif status in ['FAILED', 'DECLINED'] %}<span class="badge text-bg-danger">{{ rawStatus }}</span>{% else %}<span class="badge text-bg-warning">{{ rawStatus }}</span>{% endif %}</td><td class="text-nowrap">{% if payment.checkoutUrl %}<a class="btn btn-sm btn-outline-primary" href="{{ payment.checkoutUrl }}" target="_blank" rel="noopener">Lien</a>{% else %}—{% endif %}</td><td class="text-nowrap">{% if payment.paid != true %}<form method="post"action="{{ path('app_subscription_payment_delete', {id: payment.id}) }}"onsubmit="return confirm('Supprimer cette facture non payée ?');"><input type="hidden" name="_csrf_token" value="{{ csrf_token('delete_subscription_payment_' ~ payment.id) }}"><button type="submit" class="btn btn-sm btn-outline-danger">Supprimer</button></form>{% else %}—{% endif %}</td></tr>{% endfor %}</tbody></table></div></div></div></div></div>{% endif %}</div></div><script>$.ajaxSetup({cache: false});function unableAdmin(id) {let url = replacePlaceholder("{{ path('app_unable_entreprise', {'id': 'placeholder'}) }}", id);getContentForModal(url, "Désactivation du compte bailleur", function() {enableEditForm(id);});}function saveUnableEntreprise(id) {let url = replacePlaceholder("{{ path('app_unable_entreprise_save_change', {'id': 'placeholder'}) }}", id);return _doPost('#entry-form-'+id, url);}</script>{% endblock %}