feat: Update promotion code forms to display amounts in euros

- Changed discount amount input from cents to euros in new and edit forms
- Added decimal support with step="0.01" for precise euro amounts
- Updated form labels and help text to reflect euro display
- Added value conversion from stored cents to euros for editing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
kbe
2025-09-29 14:46:39 +02:00
parent a4a427ad5c
commit 72d54e02ab
4 changed files with 592 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
<% content_for(:title, "Modifier le code de réduction - #{@event.name}") %>
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Breadcrumb -->
<%= render 'components/breadcrumb', crumbs: [
{ name: 'Accueil', path: root_path },
{ name: 'Tableau de bord', path: dashboard_path },
{ name: 'Mes événements', path: promoter_events_path },
{ name: @event.name, path: promoter_event_path(@event) },
{ name: 'Codes de réduction', path: promoter_event_promotion_codes_path(@event) },
{ name: "Modifier #{@promotion_code.code}" }
] %>
<div class="max-w-2xl mx-auto">
<div class="mb-8">
<div class="flex items-center space-x-4 mb-4">
<%= link_to promoter_event_promotion_codes_path(@event), class: "text-gray-400 hover:text-gray-600 transition-colors" do %>
<i data-lucide="arrow-left" class="w-5 h-5"></i>
<% end %>
<div class="flex-1">
<h1 class="text-3xl font-bold text-gray-900 mb-2">Modifier le code de réduction</h1>
<p class="text-gray-600">
<code class="bg-gray-100 px-2 py-1 rounded text-sm"><%= @promotion_code.code %></code> pour <%= link_to @event.name, promoter_event_path(@event), class: "text-purple-600 hover:text-purple-800" %>
</p>
</div>
</div>
</div>
<%= form_with(model: [@event, @promotion_code], url: promoter_event_promotion_code_path(@event, @promotion_code), method: :patch, local: true, class: "bg-white rounded-2xl border border-gray-200 p-6 sm:p-8") do |form| %>
<% if @promotion_code.errors.any? %>
<div class="bg-red-50 border border-red-200 rounded-2xl p-4 mb-6">
<div class="flex items-start">
<i data-lucide="alert-circle" class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0"></i>
<div class="flex-1">
<h3 class="text-sm font-medium text-red-800 mb-2">
<%= pluralize(@promotion_code.errors.count, "erreur") %> ont empêché ce code de réduction d'être sauvegardé :
</h3>
<ul class="list-disc list-inside text-sm text-red-700">
<% @promotion_code.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
</div>
</div>
<% end %>
<div class="space-y-6">
<div>
<%= form.label :code, "Code de réduction", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.text_field :code, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors", placeholder: "Ex: SUMMER2024, BIENVENUE10, etc." %>
<p class="text-sm text-gray-500 mt-2">Ce code sera visible par les clients lors du paiement</p>
</div>
<div>
<%= form.label :discount_amount_cents, "Montant de la réduction (en euros)", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.number_field :discount_amount_cents, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors", placeholder: "10", min: 0, step: "0.01", value: number_with_precision(@promotion_code.discount_amount_cents.to_f / 100, precision: 2) %>
<p class="text-sm text-gray-500 mt-2">Entrez le montant en euros (ex: 10, 5.50, 25)</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<%= form.label :expires_at, "Date d'expiration", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.datetime_local_field :expires_at, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors" %>
<p class="text-sm text-gray-500 mt-2">Laissez vide pour une durée illimitée</p>
</div>
<div>
<%= form.label :usage_limit, "Limite d'utilisation", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.number_field :usage_limit, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors", placeholder: "Ex: 50", min: 1 %>
<p class="text-sm text-gray-500 mt-2">Laissez vide pour une utilisation illimitée</p>
</div>
</div>
<div class="flex items-center justify-between p-4 bg-gray-50 rounded-lg">
<div class="flex items-center">
<%= form.check_box :active, class: "h-4 w-4 text-purple-600 focus:ring-purple-500 border-gray-300 rounded" %>
<%= form.label :active, "Code actif", class: "ml-3 block text-sm font-medium text-gray-900" %>
</div>
<div class="text-sm text-gray-500">
Les clients peuvent utiliser ce code de réduction
</div>
</div>
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<div class="flex items-start">
<i data-lucide="info" class="w-5 h-5 text-blue-400 mr-3 mt-0.5 flex-shrink-0"></i>
<div>
<h4 class="text-sm font-medium text-blue-800 mb-1">Statut actuel</h4>
<div class="text-sm text-blue-700">
<p>Utilisations: <%= @promotion_code.uses_count %><%= " / #{@promotion_code.usage_limit}" if @promotion_code.usage_limit %></p>
<p>Commandes associées: <%= @promotion_code.orders.count %></p>
</div>
</div>
</div>
</div>
</div>
<div class="flex items-center justify-between pt-6 mt-8 border-t border-gray-200">
<%= link_to promoter_event_promotion_codes_path(@event), class: "inline-flex items-center px-6 py-3 border border-gray-300 text-gray-700 font-medium rounded-lg hover:bg-gray-50 transition-colors duration-200" do %>
<i data-lucide="x" class="w-4 h-4 mr-2"></i>
Annuler
<% end %>
<%= form.submit "Mettre à jour le code de réduction", class: "inline-flex items-center px-6 py-3 bg-gray-900 text-white font-medium rounded-lg hover:bg-gray-800 transition-colors duration-200" %>
</div>
<% end %>
</div>
</div>

View File

@@ -0,0 +1,175 @@
<% content_for(:title, "Codes de réduction - #{@event.name}") %>
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Breadcrumb -->
<%= render 'components/breadcrumb', crumbs: [
{ name: 'Accueil', path: root_path },
{ name: 'Tableau de bord', path: dashboard_path },
{ name: 'Mes événements', path: promoter_events_path },
{ name: @event.name, path: promoter_event_path(@event) },
{ name: 'Codes de réduction' }
] %>
<div class="mb-8">
<div class="flex items-center space-x-4 mb-4">
<%= link_to promoter_event_path(@event), class: "text-gray-400 hover:text-gray-600 transition-colors" do %>
<i data-lucide="arrow-left" class="w-5 h-5"></i>
<% end %>
<div class="flex-1">
<h1 class="text-3xl font-bold text-gray-900 mb-2">Codes de réduction</h1>
<p class="text-gray-600">
<%= link_to @event.name, promoter_event_path(@event), class: "text-purple-600 hover:text-purple-800" %>
</p>
</div>
<%= link_to new_promoter_event_promotion_code_path(@event), class: "inline-flex items-center px-6 py-3 bg-gray-900 text-white font-medium rounded-lg hover:bg-gray-800 transition-colors duration-200" do %>
<i data-lucide="plus" class="w-4 h-4 mr-2"></i>
Nouveau code
<% end %>
</div>
<!-- Event status info -->
<% if @event.draft? %>
<div class="bg-gray-50 border border-gray-200 rounded-2xl p-4 mb-6">
<div class="flex items-center">
<i data-lucide="info" class="w-5 h-5 text-gray-400 mr-3"></i>
<p class="text-sm text-gray-600">
Cet événement est en brouillon. Les codes de réduction ne seront actifs qu'une fois l'événement publié.
</p>
</div>
</div>
<% end %>
</div>
<% if @promotion_codes.any? %>
<div class="grid gap-6">
<% @promotion_codes.each do |promotion_code| %>
<div class="bg-white rounded-2xl border border-gray-200 p-6 hover:shadow-md transition-shadow duration-200">
<div class="flex items-start justify-between">
<!-- Promotion code info -->
<div class="flex-1">
<div class="flex items-start justify-between mb-4">
<div>
<h3 class="text-xl font-semibold text-gray-900 mb-2">
<%= link_to promotion_code.code, promoter_event_promotion_code_path(@event, promotion_code), class: "hover:text-purple-600 transition-colors" %>
</h3>
<p class="text-gray-600 mb-3">Réduction de <%= number_to_currency(promotion_code.discount_amount_cents / 100.0, unit: "€") %></p>
</div>
<!-- Status badge -->
<div class="ml-4">
<% if promotion_code.active? && (promotion_code.expires_at.nil? || promotion_code.expires_at > Time.current) %>
<span class="inline-flex px-3 py-1 text-sm font-semibold rounded-full bg-green-100 text-green-800">
<i data-lucide="check-circle" class="w-4 h-4 mr-1"></i>
Actif
</span>
<% elsif promotion_code.expires_at && promotion_code.expires_at <= Time.current %>
<span class="inline-flex px-3 py-1 text-sm font-semibold rounded-full bg-red-100 text-red-800">
<i data-lucide="x-circle" class="w-4 h-4 mr-1"></i>
Expiré
</span>
<% else %>
<span class="inline-flex px-3 py-1 text-sm font-semibold rounded-full bg-gray-100 text-gray-800">
<i data-lucide="pause-circle" class="w-4 h-4 mr-1"></i>
Inactif
</span>
<% end %>
</div>
</div>
<!-- Promotion code details grid -->
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-4">
<div class="text-center p-3 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-green-600">
<%= number_to_currency(promotion_code.discount_amount_cents / 100.0, unit: "€") %>
</div>
<div class="text-sm text-gray-500">Réduction</div>
</div>
<div class="text-center p-3 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-gray-900">
<% if promotion_code.usage_limit %>
<%= promotion_code.usage_limit - promotion_code.uses_count %>
<% else %>
<% end %>
</div>
<div class="text-sm text-gray-500">Restants</div>
</div>
<div class="text-center p-3 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-gray-900">
<%= promotion_code.uses_count %>
</div>
<div class="text-sm text-gray-500">Utilisés</div>
</div>
<div class="text-center p-3 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-blue-600">
<%= promotion_code.orders.count %>
</div>
<div class="text-sm text-gray-500">Commandes</div>
</div>
</div>
<!-- Additional info -->
<div class="flex flex-wrap items-center gap-4 text-sm text-gray-500 mb-4">
<% if promotion_code.expires_at %>
<span class="flex items-center">
<i data-lucide="clock" class="w-4 h-4 mr-1"></i>
Expire le : <%= l(promotion_code.expires_at, format: :short) %>
</span>
<% else %>
<span class="flex items-center">
<i data-lucide="infinity" class="w-4 h-4 mr-1"></i>
Pas d'expiration
</span>
<% end %>
<span class="flex items-center">
<i data-lucide="user" class="w-4 h-4 mr-1"></i>
<% if promotion_code.user.first_name && promotion_code.user.last_name %>
Créé par : <%= promotion_code.user.first_name %> <%= promotion_code.user.last_name %>
<% else %>
Créé par : <%= promotion_code.user.email %>
<% end %>
</span>
</div>
</div>
</div>
<!-- Actions -->
<div class="flex items-center justify-between pt-4 border-t border-gray-200">
<div class="flex items-center space-x-3">
<%= link_to edit_promoter_event_promotion_code_path(@event, promotion_code), class: "text-gray-400 hover:text-blue-600 transition-colors", title: "Modifier" do %>
<i data-lucide="edit" class="w-5 h-5"></i>
<% end %>
<% if promotion_code.orders.empty? %>
<%= button_to promoter_event_promotion_code_path(@event, promotion_code), method: :delete,
data: { confirm: "Êtes-vous sûr de vouloir supprimer ce code de réduction ?" },
class: "text-gray-400 hover:text-red-600 transition-colors", title: "Supprimer" do %>
<i data-lucide="trash-2" class="w-5 h-5"></i>
<% end %>
<% end %>
</div>
<div class="text-sm text-gray-500">
Créé il y a <%= time_ago_in_words(promotion_code.created_at) %>
</div>
</div>
</div>
<% end %>
</div>
<% else %>
<div class="bg-white rounded-2xl border-2 border-dashed border-gray-300 p-12 text-center">
<div class="mx-auto h-24 w-24 rounded-full bg-gray-100 flex items-center justify-center mb-6">
<i data-lucide="tag" class="w-12 h-12 text-gray-400"></i>
</div>
<h3 class="text-xl font-semibold text-gray-900 mb-2">Aucun code de réduction</h3>
<p class="text-gray-500 mb-6">Créez des codes de réduction pour offrir des remises spéciales à vos clients.</p>
<%= link_to new_promoter_event_promotion_code_path(@event), class: "inline-flex items-center px-6 py-3 bg-gray-900 text-white font-medium rounded-lg hover:bg-gray-800 transition-colors duration-200" do %>
<i data-lucide="plus" class="w-4 h-4 mr-2"></i>
Créer mon premier code de réduction
<% end %>
</div>
<% end %>
</div>

View File

@@ -0,0 +1,96 @@
<% content_for(:title, "Nouveau code de réduction - #{@event.name}") %>
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Breadcrumb -->
<%= render 'components/breadcrumb', crumbs: [
{ name: 'Accueil', path: root_path },
{ name: 'Tableau de bord', path: dashboard_path },
{ name: 'Mes événements', path: promoter_events_path },
{ name: @event.name, path: promoter_event_path(@event) },
{ name: 'Codes de réduction', path: promoter_event_promotion_codes_path(@event) },
{ name: 'Nouveau code' }
] %>
<div class="max-w-2xl mx-auto">
<div class="mb-8">
<div class="flex items-center space-x-4 mb-4">
<%= link_to promoter_event_promotion_codes_path(@event), class: "text-gray-400 hover:text-gray-600 transition-colors" do %>
<i data-lucide="arrow-left" class="w-5 h-5"></i>
<% end %>
<div class="flex-1">
<h1 class="text-3xl font-bold text-gray-900 mb-2">Nouveau code de réduction</h1>
<p class="text-gray-600">
Pour <%= link_to @event.name, promoter_event_path(@event), class: "text-purple-600 hover:text-purple-800" %>
</p>
</div>
</div>
</div>
<%= form_with(model: [@event, @promotion_code], url: promoter_event_promotion_codes_path(@event), local: true, class: "bg-white rounded-2xl border border-gray-200 p-6 sm:p-8") do |form| %>
<% if @promotion_code.errors.any? %>
<div class="bg-red-50 border border-red-200 rounded-2xl p-4 mb-6">
<div class="flex items-start">
<i data-lucide="alert-circle" class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0"></i>
<div class="flex-1">
<h3 class="text-sm font-medium text-red-800 mb-2">
<%= pluralize(@promotion_code.errors.count, "erreur") %> ont empêché ce code de réduction d'être sauvegardé :
</h3>
<ul class="list-disc list-inside text-sm text-red-700">
<% @promotion_code.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
</div>
</div>
<% end %>
<div class="space-y-6">
<div>
<%= form.label :code, "Code de réduction", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.text_field :code, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors", placeholder: "Ex: SUMMER2024, BIENVENUE10, etc." %>
<p class="text-sm text-gray-500 mt-2">Ce code sera visible par les clients lors du paiement</p>
</div>
<div>
<%= form.label :discount_amount_cents, "Montant de la réduction (en euros)", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.number_field :discount_amount_cents, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors", placeholder: "10", min: 0, step: "0.01", value: number_with_precision(@promotion_code.discount_amount_cents.to_f / 100, precision: 2) %>
<p class="text-sm text-gray-500 mt-2">Entrez le montant en euros (ex: 10, 5.50, 25)</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<%= form.label :expires_at, "Date d'expiration", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.datetime_local_field :expires_at, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors" %>
<p class="text-sm text-gray-500 mt-2">Laissez vide pour une durée illimitée</p>
</div>
<div>
<%= form.label :usage_limit, "Limite d'utilisation", class: "block text-sm font-medium text-gray-700 mb-2" %>
<%= form.number_field :usage_limit, class: "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent transition-colors", placeholder: "Ex: 50", min: 1 %>
<p class="text-sm text-gray-500 mt-2">Laissez vide pour une utilisation illimitée</p>
</div>
</div>
<div class="flex items-center justify-between p-4 bg-gray-50 rounded-lg">
<div class="flex items-center">
<%= form.check_box :active, class: "h-4 w-4 text-purple-600 focus:ring-purple-500 border-gray-300 rounded" %>
<%= form.label :active, "Code actif", class: "ml-3 block text-sm font-medium text-gray-900" %>
</div>
<div class="text-sm text-gray-500">
Les clients peuvent utiliser ce code de réduction
</div>
</div>
</div>
<div class="flex items-center justify-between pt-6 mt-8 border-t border-gray-200">
<%= link_to promoter_event_promotion_codes_path(@event), class: "inline-flex items-center px-6 py-3 border border-gray-300 text-gray-700 font-medium rounded-lg hover:bg-gray-50 transition-colors duration-200" do %>
<i data-lucide="x" class="w-4 h-4 mr-2"></i>
Annuler
<% end %>
<%= form.submit "Créer le code de réduction", class: "inline-flex items-center px-6 py-3 bg-gray-900 text-white font-medium rounded-lg hover:bg-gray-800 transition-colors duration-200" %>
</div>
<% end %>
</div>
</div>

View File

@@ -0,0 +1,212 @@
<% content_for(:title, "Code de réduction #{@promotion_code.code} - #{@event.name}") %>
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Breadcrumb -->
<%= render 'components/breadcrumb', crumbs: [
{ name: 'Accueil', path: root_path },
{ name: 'Tableau de bord', path: dashboard_path },
{ name: 'Mes événements', path: promoter_events_path },
{ name: @event.name, path: promoter_event_path(@event) },
{ name: 'Codes de réduction', path: promoter_event_promotion_codes_path(@event) },
{ name: @promotion_code.code }
] %>
<div class="max-w-4xl mx-auto">
<div class="mb-8">
<div class="flex items-center space-x-4 mb-4">
<%= link_to promoter_event_promotion_codes_path(@event), class: "text-gray-400 hover:text-gray-600 transition-colors" do %>
<i data-lucide="arrow-left" class="w-5 h-5"></i>
<% end %>
<div class="flex-1">
<h1 class="text-3xl font-bold text-gray-900 mb-2">Détails du code de réduction</h1>
<p class="text-gray-600">
<code class="bg-gray-100 px-2 py-1 rounded text-sm"><%= @promotion_code.code %></code> pour <%= link_to @event.name, promoter_event_path(@event), class: "text-purple-600 hover:text-purple-800" %>
</p>
</div>
</div>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 lg:gap-8">
<!-- Main content -->
<div class="lg:col-span-2 space-y-6 lg:space-y-8">
<!-- Code details -->
<div class="bg-white rounded-2xl border border-gray-200 p-6">
<h3 class="text-lg font-semibold text-gray-900 mb-6">Informations du code</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<div class="text-sm text-gray-500 mb-2">Code</div>
<div class="text-lg font-semibold bg-gray-100 px-3 py-2 rounded-lg font-mono">
<%= @promotion_code.code %>
</div>
</div>
<div>
<div class="text-sm text-gray-500 mb-2">Statut</div>
<div>
<% if @promotion_code.active? && (promotion_code.expires_at.nil? || promotion_code.expires_at > Time.current) %>
<span class="inline-flex px-3 py-1 text-sm font-semibold rounded-full bg-green-100 text-green-800">
<i data-lucide="check-circle" class="w-4 h-4 mr-1"></i>
Actif
</span>
<% elsif @promotion_code.expires_at && @promotion_code.expires_at <= Time.current %>
<span class="inline-flex px-3 py-1 text-sm font-semibold rounded-full bg-red-100 text-red-800">
<i data-lucide="x-circle" class="w-4 h-4 mr-1"></i>
Expiré
</span>
<% else %>
<span class="inline-flex px-3 py-1 text-sm font-semibold rounded-full bg-gray-100 text-gray-800">
<i data-lucide="pause-circle" class="w-4 h-4 mr-1"></i>
Inactif
</span>
<% end %>
</div>
</div>
<div>
<div class="text-sm text-gray-500 mb-2">Montant de la réduction</div>
<div class="text-lg font-semibold text-green-600">
<%= number_to_currency(@promotion_code.discount_amount_cents / 100.0, unit: "€") %>
</div>
</div>
<div>
<div class="text-sm text-gray-500 mb-2">Événement</div>
<div class="text-lg font-semibold">
<%= link_to @event.name, promoter_event_path(@event), class: "text-purple-600 hover:text-purple-800" %>
</div>
</div>
</div>
</div>
<!-- Usage stats -->
<div class="bg-white rounded-2xl border border-gray-200 p-6">
<h3 class="text-lg font-semibold text-gray-900 mb-6">Statistiques d'utilisation</h3>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
<div class="text-center p-4 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-gray-900">
<%= @promotion_code.uses_count %>
</div>
<div class="text-sm text-gray-500">Utilisations</div>
</div>
<div class="text-center p-4 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-blue-600">
<% if @promotion_code.usage_limit %>
<%= @promotion_code.usage_limit - @promotion_code.uses_count %>
<% else %>
<% end %>
</div>
<div class="text-sm text-gray-500">Restants</div>
</div>
<div class="text-center p-4 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-purple-600">
<%= @promotion_code.orders.count %>
</div>
<div class="text-sm text-gray-500">Commandes</div>
</div>
<div class="text-center p-4 bg-gray-50 rounded-lg">
<div class="text-2xl font-bold text-green-600">
<%= number_to_currency(@promotion_code.orders.sum(:total_amount_cents) / 100.0, unit: "€") %>
</div>
<div class="text-sm text-gray-500">Montant total</div>
</div>
</div>
</div>
<!-- Orders using this code -->
<% if @promotion_code.orders.any? %>
<div class="bg-white rounded-2xl border border-gray-200 p-6">
<h3 class="text-lg font-semibold text-gray-900 mb-4">Commandes utilisant ce code</h3>
<div class="space-y-3">
<% @promotion_code.orders.includes(:user).order(created_at: :desc).limit(5).each do |order| %>
<div class="flex items-center justify-between p-3 bg-gray-50 rounded-lg">
<div>
<div class="font-medium text-gray-900">Commande #<%= order.id %></div>
<div class="text-sm text-gray-500">
<%= order.user.email %> • <%= l(order.created_at, format: :short) %>
</div>
</div>
<div class="text-right">
<div class="font-medium text-gray-900"><%= number_to_currency(order.total_amount_cents / 100.0, unit: "€") %></div>
<div class="text-sm text-gray-500"><%= order.status %></div>
</div>
</div>
<% end %>
<% if @promotion_code.orders.count > 5 %>
<div class="text-center pt-2">
<span class="text-sm text-gray-500">
Et <%= @promotion_code.orders.count - 5 %> autres commandes...
</span>
</div>
<% end %>
</div>
</div>
<% end %>
</div>
<!-- Sidebar -->
<div class="space-y-6">
<!-- Additional info -->
<div class="bg-white rounded-2xl border border-gray-200 p-6">
<h3 class="text-lg font-semibold text-gray-900 mb-4">Informations supplémentaires</h3>
<div class="space-y-4">
<div>
<span class="text-sm text-gray-500">Créé par</span>
<p class="text-sm font-medium"><%= @promotion_code.user.email %></p>
</div>
<div>
<span class="text-sm text-gray-500">Créé le</span>
<p class="text-sm"><%= l(@promotion_code.created_at, format: :long) %></p>
</div>
<div>
<span class="text-sm text-gray-500">Modifié le</span>
<p class="text-sm"><%= l(@promotion_code.updated_at, format: :long) %></p>
</div>
<% if @promotion_code.expires_at %>
<div>
<span class="text-sm text-gray-500">Date d'expiration</span>
<p class="text-sm"><%= l(@promotion_code.expires_at, format: :long) %></p>
</div>
<% else %>
<div>
<span class="text-sm text-gray-500">Date d'expiration</span>
<p class="text-sm">Jamais</p>
</div>
<% end %>
</div>
</div>
<!-- Actions -->
<div class="bg-white rounded-2xl border border-gray-200 p-6">
<h3 class="text-lg font-semibold text-gray-900 mb-4">Actions</h3>
<div class="space-y-3">
<%= link_to edit_promoter_event_promotion_code_path(@event, @promotion_code), class: "w-full inline-flex items-center justify-center px-4 py-3 bg-gray-900 text-white font-medium rounded-lg hover:bg-gray-800 transition-colors duration-200" do %>
<i data-lucide="edit" class="w-4 h-4 mr-2"></i>
Modifier
<% end %>
<% if @promotion_code.orders.empty? %>
<%= button_to promoter_event_promotion_code_path(@event, @promotion_code), method: :delete,
data: { confirm: "Êtes-vous sûr de vouloir supprimer ce code de réduction ?" },
class: "w-full inline-flex items-center justify-center px-4 py-3 text-red-600 font-medium rounded-lg hover:bg-red-50 transition-colors duration-200" do %>
<i data-lucide="trash-2" class="w-4 h-4 mr-2"></i>
Supprimer
<% end %>
<% end %>
<%= link_to promoter_event_promotion_codes_path(@event), class: "w-full inline-flex items-center justify-center px-4 py-3 border border-gray-300 text-gray-700 font-medium rounded-lg hover:bg-gray-50 transition-colors duration-200" do %>
<i data-lucide="arrow-left" class="w-4 h-4 mr-2"></i>
Retour à la liste
<% end %>
</div>
</div>
</div>
</div>
</div>
</div>