249 Commits

Author SHA1 Message Date
kbe b580431b12 Merge pull request 'feat/image-upload' (#7) from feat/image-upload into develop
Reviewed-on: #7
2025-09-29 22:54:59 +00:00
kbe d85996a1bb chore(api/events_controller): Move helper to the end of file
I moved this helper to the end of file to permit
a better understanability of the controller. Display
order matches execution order.
2025-09-30 00:45:15 +02:00
kbe 6be8b95ed3 feat: Implement event image upload system for promoters
- Add Active Storage migrations for file attachments
- Update Event model to handle image uploads with validation
- Replace image URL fields with file upload in forms
- Add client-side image preview with validation
- Update all views to display uploaded images properly
- Fix JSON serialization to prevent stack overflow in API
- Add custom image validation methods for format and size
- Include image processing variants for different display sizes
- Fix promotion code test infrastructure and Stripe configuration

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 00:41:03 +02:00
kbe be7b3d5c18 Merge pull request 'fix(promotion code): Cap the minimum invoice for Stripe' (#6) from feat/promotion-code into develop
Reviewed-on: #6
2025-09-29 22:02:53 +00:00
kbe 66fffa8676 fix(promotion code): Cap the minimum invoice for Stripe
Stripe does not support negative invoices, so to
allow correct invoice generation, we apply dismiss
negative invoices.
2025-09-29 23:55:21 +02:00
kbe aacc9398d0 Merge pull request 'feat/promotion-code' (#5) from feat/promotion-code into develop
Ruby on Rails Test / rails-test (push) Successful in 1m40s
Reviewed-on: #5
2025-09-29 18:41:07 +00:00
kbe 635644b55a 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>
2025-09-29 20:34:49 +02:00
kbe 87ccebf229 feat(promotion code): Promotion code system done
I added the features for users to use promotion code
and for promoters to create on their events.
May be rewrite to discount code?
2025-09-29 15:25:52 +02:00
kbe 72d54e02ab 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>
2025-09-29 14:46:39 +02:00
kbe a4a427ad5c feat(migrations): Add promotion code migrations 2025-09-29 11:59:48 +02:00
kbe 1fc3311ca9 feat: Add Bizouk events to seeds for development
Add 3 events fetched from Bizouk:
- Konpa With Bev - Cours De Konpa Gouyad (Oct 3)
- La Plus Grosse Soirée Caribbean Groove (Oct 3-4)
- LA BELLE ÉPOQUE PAR SISLEY ÉVENTS - OCTOBRE (Oct 4-5)

Each event includes appropriate ticket types with pricing and age restrictions.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 11:59:01 +02:00
kbe ae1ae89a97 Add a compose for production 2025-09-29 01:17:26 +02:00
kbe 0b7dd55530 Optimize Dockerfile.production for better performance and security
- Fixed libvips package name from libvips-16t64 to libvips42 for proper installation
- Moved gem install rails to build stage where build tools are available
- Changed to ruby slim base image for smaller final image size
- Improved layer caching by organizing dependency installation
- Enhanced security with non-root user
- Added jemalloc configuration for better memory management
- Cleaned up build artifacts to reduce image size

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2025-09-29 01:08:11 +02:00
kbe a69ddb4012 feat: Add promotion code functionality to ticket orders 2025-09-28 20:20:22 +02:00
kbe e5ed1a34dd refactor: migrate payment success views to orders system and add promoter seed data
Ruby on Rails Test / rails-test (push) Successful in 1m48s
2025-09-16 21:32:42 +02:00
kbe 3e0a354a58 Merge pull request 'feat/free-ticket' (#4) from feat/free-ticket into develop
Ruby on Rails Test / rails-test (push) Successful in 1m31s
Reviewed-on: #4
2025-09-16 15:27:51 +00:00
kbe b5c1846f2c fix(mailers): Include TicketsHelper in TicketMailer to make format_ticket_price available
- Add helper :tickets to TicketMailer to make format_ticket_price method available in mailer templates
- Fixes undefined method 'format_ticket_price' error in purchase confirmation emails
- Required after recent changes to support free tickets
2025-09-16 17:25:14 +02:00
kbe 04393add14 fix(tests): Remove service fee expectation from Stripe invoice test and fix duplicated keys in event view
- Update StripeInvoiceServiceTest to match the implementation that no longer adds service fees to customer invoices
- Remove duplicated Stimulus data attributes in events/show.html.erb that were causing warnings
- Align tests with the hybrid fee model where fees are deducted from promoter payouts
2025-09-16 17:22:00 +02:00
kbe 5279ebe1a4 feat(event available/sold out): Promoter can mark event as sold out or available
On the event page, promoter can choose to mark the event as "sold out" using the status field or as "published". Only published event can be marked as sold out if promoter thinks he cannot handle all the people available.
2025-09-16 17:15:09 +02:00
kbe 329ba89eaa chore: Better description details for ticket types 2025-09-16 17:00:04 +02:00
kbe 9c56b2e1e5 refactor: prepare for free ticket 2025-09-16 16:36:39 +02:00
kbe a8d3bc12ae Merge pull request 'feat/free-ticket' (#2) from feat/free-ticket into develop
Ruby on Rails Test / rails-test (push) Successful in 1m56s
Reviewed-on: #2
2025-09-16 14:31:43 +00:00
kbe b228d5a174 chore: Breadcrumb on ticket edit page 2025-09-16 16:22:09 +02:00
kbe 61ad8c64d4 Fix modal overlay issue and improve modal structure
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2025-09-16 08:44:21 +02:00
kbe 4e06f91acb Fix modal positioning and improve Stimulus controller
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2025-09-16 08:43:00 +02:00
kbe 28eddb22ab Refactor duplication feature to use Stimulus controller and fix modal issues
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2025-09-15 21:23:29 +02:00
kbe a34eb7aa38 Add duplication options with JavaScript modal and conditional ticket type cloning
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2025-09-15 21:20:22 +02:00
kbe aa68885b84 Add event duplication feature with ticket types cloning
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2025-09-15 21:17:24 +02:00
kbe c1dde7914c refactor: remove 1€ fees on payment 2025-09-15 21:09:57 +02:00
kbe dbb972e490 feat: Add countdown when order expire in less than 5 minutes 2025-09-15 21:09:19 +02:00
kbe 049e5505ef refactor(pricing): implement hybrid fee model (€0.50 + 1.5%) deducted from promoter payout
- Remove 1€ fixed fee from orders and Stripe invoices
- Add platform_fee_cents, promoter_payout_cents methods to Order model
- Update views to show clean ticket totals without added fees
- Update tests for new fee calculation logic
- Update pricing docs with implemented model
2025-09-15 20:07:51 +02:00
kbe d6184b6c84 refactor: extract cart storage to dedicated API controller with dynamic frontend URLs
Ruby on Rails Test / rails-test (push) Successful in 1m7s
- Added dedicated CartsController for session-based cart storage
- Refactored routes to use POST /api/v1/carts/store
- Updated ticket selection JS to use dynamic data attributes for URLs
- Fixed CSRF protection in API and checkout payment increment
- Made checkout button URLs dynamic via data attributes
- Updated tests for new cart storage endpoint
- Removed obsolete store_cart from EventsController
2025-09-15 19:52:01 +02:00
kbe 4cde466f9a Add comprehensive unit test coverage for controllers, models, and services
- Translate French comments to English in controllers and tests
- Fix test failures: route helpers, validations, MySQL transaction issues
- Add Timecop for time-dependent tests and update database config for isolation
2025-09-15 19:27:06 +02:00
kbe ee43996a77 feat(book after start): prepare to rework event to allow ticket sell
after start
2025-09-15 19:07:19 +02:00
kbe f0d32bf3f1 Improve mobile responsiveness 2025-09-15 19:06:15 +02:00
kbe 20f926cd7a Move `allow_booking_during_event` into base migration 2025-09-15 19:06:05 +02:00
kbe d1ef962f74 feat: Improve mobile responsiveness for promoter event detail page
- Restructure header layout with separated title and action buttons
- Make all action buttons full-width on mobile (w-full sm:w-auto)
- Add responsive text sizing and proper truncation for long titles
- Improve status banners with flexible layouts for mobile
- Enhance content cards with responsive padding (p-4 sm:p-6)
- Add better text wrapping and overflow handling throughout
- Optimize sidebar with responsive font sizes and spacing
- Ensure consistent touch targets and button accessibility

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 18:23:45 +02:00
kbe e84d9aad5b feat: Improve mobile responsiveness for promoter events page
- Add responsive header with stacked layout on mobile
- Implement dual layout system: table for desktop, cards for mobile
- Make all action buttons full-width and accessible on mobile
- Add proper spacing and touch targets for mobile UX
- Ensure "Créer un événement" button is full-width on mobile
- Improve empty state responsiveness

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 18:08:05 +02:00
kbe 24126eb834 style: lint code
Ruby on Rails Test / rails-test (push) Successful in 1m55s
2025-09-15 17:41:35 +02:00
kbe 9a1976b6af Add breadcrumb to settings page 2025-09-15 17:41:23 +02:00
kbe a8c7e82507 Merge branch 'feat/promoters' into develop
Ruby on Rails Test / rails-test (push) Successful in 2m19s
2025-09-15 17:21:03 +02:00
kbe 889afd0d01 Change available tickets details 2025-09-15 17:18:14 +02:00
kbe 82f0fab1f5 Disable authentication for API
Ruby on Rails Test / rails-test (push) Has been cancelled
2025-09-15 17:15:49 +02:00
kbe 91e6425c1e feat: Settings page to update profile 2025-09-11 16:07:25 +02:00
kbe f54742b041 feat: Add booking control during events
- Add allow_booking_during_event boolean field to events (defaults to false)
- Implement booking_allowed? method to check if tickets can be purchased
- Add event_started? and event_ended? helper methods
- Include new option in event edit form with clear explanation
- Display booking policy status on event show page
- Add visual indicator when booking is disabled during ongoing events
- Update controller to permit new parameter

This allows promoters to control whether attendees can purchase tickets
after an event has started, providing flexibility for different event types.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 08:49:01 +02:00
kbe 21919c813e Merge branch 'develop' into feat/promoters 2025-09-11 08:41:23 +02:00
kbe 8ecfc7bf99 feat: Display error message when event does not have any ticket type
Ruby on Rails Test / rails-test (push) Failing after 2m18s
2025-09-11 08:35:54 +02:00
kbe 28ef801c9a feat: Add warning for publishing events without ticket types
Ruby on Rails Test / rails-test (push) Has been cancelled
- Add prominent warning banner on event show page for draft events with no ticket types
- Disable publish button when no ticket types are configured
- Include helpful tooltip and direct link to configure ticket types
- Improve UX by preventing invalid publish attempts

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 08:35:05 +02:00
kbe 55b39e93bf enhance: Implement dynamic message template system with progress tracking
Ruby on Rails Test / rails-test (push) Failing after 13m31s
- Add comprehensive message template system with 5 distinct message types
- Implement progress tracking for multi-strategy geocoding attempts
- Add dismissible messages with auto-timeout functionality
- Enhance visual design with proper spacing, shadows, and animations
- Add specialized geocoding success messages with location details
- Improve user experience with contextual progress indicators
- Support HTML content in messages for better formatting

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 22:01:26 +02:00
kbe 9bebdef5a5 feat: Implement comprehensive geocoding improvements with loading indicators
- Add multi-strategy geocoding fallback system for better address resolution
- Implement loading spinners and visual feedback for all geocoding operations
- Move geocoding messages to venue section for better visibility
- Add dynamic message template system with proper styling
- Optimize backend to trust frontend coordinates and reduce API calls
- Add rate limiting and proper User-Agent headers for Nominatim compliance
- Improve error handling and user feedback throughout geocoding flow

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 21:24:28 +02:00