From 039ae7d1f873f3e6d4665ae1f90f6a4fc9b3fbc8 Mon Sep 17 00:00:00 2001 From: kbe Date: Sun, 7 Sep 2025 01:29:24 +0200 Subject: [PATCH] =?UTF-8?q?Add=201=E2=82=AC=20service=20fee=20to=20all=20o?= =?UTF-8?q?rder-related=20pages=20and=20Stripe=20integration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added 1€ service fee to order total calculation in Order model - Updated checkout page to display fee breakdown (subtotal + 1€ fee = total) - Updated payment success page to show fee breakdown - Updated order show page to display fee breakdown - Updated payment cancel page to show fee breakdown - Modified Stripe session creation to include service fee as separate line item - Updated order model tests to account for the 1€ service fee - Enhanced overall pricing transparency for users Co-authored-by: Qwen-Coder --- app/controllers/orders_controller.rb | 13 ++++++++++++ app/models/order.rb | 6 ++++-- app/views/orders/checkout.html.erb | 16 ++++++++++++--- app/views/orders/payment_cancel.html.erb | 20 ++++++++++++++----- app/views/orders/payment_success.html.erb | 20 ++++++++++++++----- app/views/orders/show.html.erb | 24 ++++++++++++++++------- test/models/order_test.rb | 4 ++-- 7 files changed, 79 insertions(+), 24 deletions(-) diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index bffa5e4..7378648 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -270,6 +270,19 @@ class OrdersController < ApplicationController } end + # Add service fee as a separate line item + line_items << { + price_data: { + currency: "eur", + product_data: { + name: "Frais de service", + description: "Frais de traitement de la commande" + }, + unit_amount: 100 # 1€ in cents + }, + quantity: 1 + } + Stripe::Checkout::Session.create( payment_method_types: [ "card" ], line_items: line_items, diff --git a/app/models/order.rb b/app/models/order.rb index ddf24ae..41eccb0 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -88,9 +88,11 @@ class Order < ApplicationRecord end end - # Calculate total from tickets + # Calculate total from tickets plus 1€ service fee def calculate_total! - update!(total_amount_cents: tickets.sum(:price_cents)) + ticket_total = tickets.sum(:price_cents) + fee_cents = 100 # 1€ in cents + update!(total_amount_cents: ticket_total + fee_cents) end # Create Stripe invoice for accounting records diff --git a/app/views/orders/checkout.html.erb b/app/views/orders/checkout.html.erb index 1139d96..d559bce 100644 --- a/app/views/orders/checkout.html.erb +++ b/app/views/orders/checkout.html.erb @@ -118,9 +118,19 @@
-
- Total - <%= @order.total_amount_euros %>€ +
+
+ Sous-total + <%= @order.total_amount_euros - 1.0 %>€ +
+
+ Frais de service + 1.00€ +
+
+ Total + <%= @order.total_amount_euros %>€ +

TVA incluse

diff --git a/app/views/orders/payment_cancel.html.erb b/app/views/orders/payment_cancel.html.erb index 68a33e4..3e1d97f 100644 --- a/app/views/orders/payment_cancel.html.erb +++ b/app/views/orders/payment_cancel.html.erb @@ -130,11 +130,21 @@
-
- Total à payer - - <%= @order.total_amount_euros %>€ - +
+
+ Sous-total + <%= @order.total_amount_euros - 1.0 %>€ +
+
+ Frais de service + 1.00€ +
+
+ Total à payer + + <%= @order.total_amount_euros %>€ + +
<% end %> diff --git a/app/views/orders/payment_success.html.erb b/app/views/orders/payment_success.html.erb index 8315e12..bfc8f48 100644 --- a/app/views/orders/payment_success.html.erb +++ b/app/views/orders/payment_success.html.erb @@ -125,11 +125,21 @@
-
- Total payé - - <%= @order.total_amount_euros %>€ - +
+
+ Sous-total + <%= @order.total_amount_euros - 1.0 %>€ +
+
+ Frais de service + 1.00€ +
+
+ Total payé + + <%= @order.total_amount_euros %>€ + +
diff --git a/app/views/orders/show.html.erb b/app/views/orders/show.html.erb index 554bded..9bf388f 100644 --- a/app/views/orders/show.html.erb +++ b/app/views/orders/show.html.erb @@ -135,11 +135,21 @@
-
- Total <%= @order.status == 'paid' || @order.status == 'completed' ? 'payé' : 'à payer' %> - - <%= @order.total_amount_euros %>€ - +
+
+ Sous-total + <%= @order.total_amount_euros - 1.0 %>€ +
+
+ Frais de service + 1.00€ +
+
+ Total <%= @order.status == 'paid' || @order.status == 'completed' ? 'payé' : 'à payer' %> + + <%= @order.total_amount_euros %>€ + +
@@ -226,7 +236,7 @@ - Retour au Tableau de Bord + Retour au tableau de bord
<% end %> <%= link_to event_path(@order.event.slug, @order.event), class: "block w-full text-center py-3 px-4 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 transition-colors" do %> @@ -234,7 +244,7 @@ - Voir l'Événement Complet + Voir la page d'évenement
<% end %> diff --git a/test/models/order_test.rb b/test/models/order_test.rb index acfdb0a..c5273b0 100644 --- a/test/models/order_test.rb +++ b/test/models/order_test.rb @@ -469,7 +469,7 @@ class OrderTest < ActiveSupport::TestCase assert_equal "active", ticket2.status end - test "calculate_total! should sum ticket prices" do + test "calculate_total! should sum ticket prices plus 1€ service fee" do order = Order.create!( user: @user, event: @event, total_amount_cents: 0, status: "draft", payment_attempts: 0 @@ -506,7 +506,7 @@ class OrderTest < ActiveSupport::TestCase order.calculate_total! order.reload - assert_equal 3000, order.total_amount_cents # 2 tickets * 1500 cents + assert_equal 3100, order.total_amount_cents # 2 tickets * 1500 cents + 100 cents (1€ fee) end # === Stripe Integration Tests (Mock) ===