feat(promotion-code): Complete promotion code integration and testing

- Add comprehensive promotion code methods to Order model
- Implement Stripe invoice integration for promotion code discounts
- Display promotion codes on invoice with proper discount breakdown
- Fix and enhance all unit tests for promotion code functionality
- Add discount calculation with capping to prevent negative totals
- Ensure promotion codes work across entire order lifecycle

🤖 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 20:33:54 +02:00
parent 87ccebf229
commit 635644b55a
7 changed files with 558 additions and 30 deletions

View File

@@ -121,13 +121,56 @@
<% end %>
</tbody>
<tfoot class="bg-gray-50">
<!-- Subtotal -->
<tr>
<th colspan="3" scope="col" class="px-6 py-3 text-right text-sm font-medium text-gray-900 uppercase tracking-wider">Total</th>
<th scope="col" class="px-6 py-3 text-right text-lg font-bold text-gray-900"><%= "%.2f" % @order.total_amount_euros %>€</th>
<td colspan="3" scope="col" class="px-6 py-3 text-right text-sm font-medium text-gray-600">Sous-total</td>
<td scope="col" class="px-6 py-3 text-right text-sm font-medium text-gray-600"><%= "%.2f" % @order.subtotal_amount_euros %>€</td>
</tr>
<!-- Promotion Code Discounts -->
<% if @order.promotion_codes.any? %>
<% @order.promotion_codes.each do |promo_code| %>
<tr>
<td colspan="3" scope="col" class="px-6 py-3 text-right text-sm font-medium text-green-600">
Réduction (Code: <%= promo_code.code %>)
</td>
<td scope="col" class="px-6 py-3 text-right text-sm font-semibold text-green-600">-<%= "%.2f" % promo_code.discount_amount_euros %>€</td>
</tr>
<% end %>
<% end %>
<!-- Total -->
<tr class="border-t-2 border-gray-300">
<td colspan="3" scope="col" class="px-6 py-3 text-right text-lg font-bold text-gray-900 uppercase tracking-wider">Total</td>
<td scope="col" class="px-6 py-3 text-right text-lg font-bold text-gray-900">
<% if @order.total_amount_cents == 0 %>
GRATUIT
<% else %>
<%= "%.2f" % @order.total_amount_euros %>€
<% end %>
</td>
</tr>
</tfoot>
</table>
</div>
<!-- Promotion Code Summary -->
<% if @order.promotion_codes.any? %>
<div class="mt-4 p-4 bg-green-50 border border-green-200 rounded-lg">
<h4 class="text-sm font-semibold text-green-900 mb-2 flex items-center">
<i data-lucide="tag" class="w-4 h-4 mr-2"></i>
Codes promotionnels appliqués
</h4>
<div class="text-xs text-green-700">
<% @order.promotion_codes.each do |promo_code| %>
<div class="flex items-center justify-between">
<span><%= promo_code.code %></span>
<span class="font-semibold">-<%= "%.2f" % promo_code.discount_amount_euros %>€</span>
</div>
<% end %>
</div>
</div>
<% end %>
</div>
<!-- Payment Information -->