Skip to content

Feature/enhancements batch#1144

Closed
chmunyas wants to merge 14 commits intoHiEventsDev:developfrom
chmunyas:feature/enhancements-batch
Closed

Feature/enhancements batch#1144
chmunyas wants to merge 14 commits intoHiEventsDev:developfrom
chmunyas:feature/enhancements-batch

Conversation

@chmunyas
Copy link
Copy Markdown

@chmunyas chmunyas commented Apr 5, 2026

Thank you for creating a PR! We appreciate your contribution to Hi.Events.

To make the process as smooth as possible, please ensure you've read the contributing guidelines before proceeding.

Please include a summary of the changes and the issue being fixed or the feature being added. The more detail, the better!

Checklist

  • I have read the contributing guidelines.
  • My code is of good quality and follows the coding standards of the project.
  • I have tested my changes, and they work as expected.

Thank you for your contribution! 🎉

chmunyas added 8 commits April 5, 2026 14:40
…cts, questions, order management

Implements the following GitHub issues:

Event Settings & Configuration:
- HiEventsDev#244: Hide event start date option
- HiEventsDev#580: Disable attendee ticket email setting
- HiEventsDev#475: Meta/Facebook Pixel tracking integration
- HiEventsDev#186: Event password/access control protection
- HiEventsDev#265: Event location type (physical/online/hybrid)
- HiEventsDev#267: External ticket URL redirect support
- HiEventsDev#206: Stripe payment method ordering
- HiEventsDev#308: Order-level min/max quantity enforcement
- HiEventsDev#184: Tax-inclusive price display mode
- HiEventsDev#1118: Social links settings section
- HiEventsDev#219: SEO settings improvements
- HiEventsDev#774: Homepage theme color customization
- HiEventsDev#772: Attendee details collection method

Products & Pricing:
- HiEventsDev#1076: Require attendee details per product
- HiEventsDev#1075: Require attendee email per product
- HiEventsDev#936: Hidden prices revealed by promo code
- HiEventsDev#770: Product highlight fields
- HiEventsDev#617: Start collapsed option for product categories
- HiEventsDev#322: Product sort/reorder functionality

Promo Codes:
- HiEventsDev#414: Promo code valid_from date scheduling
- HiEventsDev#933: Promo code custom message display
- HiEventsDev#1136: Max attendee usages limit per promo code

Questions:
- HiEventsDev#972: Conditional question display logic
- HiEventsDev#1124: Custom validation rules for questions

Attendees:
- HiEventsDev#576: Cancellation reason tracking
- HiEventsDev#1117: Attendee notes field
- HiEventsDev#182: Bulk check-in modal
- HiEventsDev#743: QR code batch printing for attendees

Orders:
- HiEventsDev#1063: Order approval/rejection workflow
- HiEventsDev#1024: Duplicate order detection
- HiEventsDev#589: Order failed email notification improvements

Organizer:
- HiEventsDev#245: Legal URLs in organizer settings
- HiEventsDev#170: Organizer event ICS calendar export
- HiEventsDev#367: Public events listing endpoint

Email & Messaging:
- HiEventsDev#890: Email template service enhancements
- HiEventsDev#727: Scheduled message support
- HiEventsDev#1041: Message type enum expansion

Other:
- HiEventsDev#885: Event document head improvements
- HiEventsDev#1055: About modal enhancements
- HiEventsDev#716: Online event details component
- HiEventsDev#490: Address utilities improvements
- HiEventsDev#778: URL helper enhancements
- HiEventsDev#32: Short event redirect loader
- HiEventsDev#599: Event card improvements
- HiEventsDev#360: Currency display component updates
- HiEventsDev#1000: Checkout question improvements
- HiEventsDev#993: Stripe checkout form enhancements
- HiEventsDev#502: Tax online-only flag

Includes 24 database migrations, domain object updates, API resource changes,
frontend type definitions, and UI components.
…nd fees

Implements GitHub issue HiEventsDev#879 - Per-order fees

Adds TaxAndFeeApplicationType enum (PER_UNIT, PER_ORDER) allowing fees
to be applied once per order rather than per ticket/product unit.

- New TaxAndFeeApplicationType enum with PER_UNIT and PER_ORDER values
- Migration to add application_type column to taxes_and_fees table
- Backend calculation logic updated in TaxAndFeeCalculationService
- Frontend TaxAndFeeForm updated with application type selector
- OrderManagementService handles per-order fee rollup at order level

Note: Shared service/resource changes included in base commit.
…order validation

Implements GitHub issue HiEventsDev#1048 - Checkout validation webhook

Allows event organizers to configure an external webhook URL that is called
during checkout to validate orders before completion. Enables custom business
rules like attendee blacklists, purchase limits, or external inventory checks.

- New CheckoutValidationWebhookService with HTTP POST to configured URL
- Migration for checkout_validation_webhook_url in event_settings
- Integration into CompleteOrderHandler and CreateOrderHandler
- Frontend settings UI in HomepageAndCheckoutSettings section

Note: Shared handler/settings changes included in base commit.
Implements GitHub issue HiEventsDev#28 - Optional first/last name

Adds a require_attendee_name event setting that controls whether first and
last name fields are required during checkout. When disabled, name fields
become optional in the attendee information collection form.

- Migration for require_attendee_name boolean in event_settings (default true)
- EventSettingDomainObjectAbstract updated with new property
- CompleteOrderValidator conditionally validates name fields
- ProductQuestionRule adapts required/nullable based on setting
- Frontend HomepageAndCheckoutSettings toggle switch
- CollectInformation form shows conditional asterisk on name fields

Note: Shared domain/settings/validator changes included in base commit.
…ders

Implements GitHub issue HiEventsDev#493 - Free ticket expiration

Adds automatic cancellation of reserved free-ticket orders that remain
incomplete beyond a configurable time window. Prevents inventory hoarding
from abandoned free checkouts.

- New CancelExpiredFreeOrdersJob scheduled every 5 minutes
- Migration for free_ticket_expiration_minutes in event_settings
- Queries orders with RESERVED status, no payment, past expiration window
- Cancels expired orders and releases reserved product quantities
- Frontend HomepageAndCheckoutSettings with expiration minutes input
- Registered in Console/Kernel.php scheduler

Note: Shared Kernel/settings changes included in base commit.
Implements GitHub issue HiEventsDev#128 - Tax inclusive pricing

Enables taxes/fees to be configured as inclusive (already included in the
displayed price) rather than exclusive (added on top). Uses the formula:
tax_amount = price * rate / (100 + rate) to extract the inclusive tax
component from the displayed price.

- Migration adds is_tax_inclusive boolean to taxes_and_fees table
- TaxCalculationResponse extended with inclusiveTaxTotal field
- TaxAndFeeCalculationService handles inclusive formula calculation
- TaxAndFeeRollupService aggregates inclusive vs exclusive amounts
- OrderItemProcessingService adjusts totalGross to exclude inclusive tax
- OrderManagementService handles per-order inclusive fee calculation
- ProductPriceDomainObject and ProductFilterService price adjustments
- Frontend TaxAndFeeForm with is_tax_inclusive toggle switch
- Tax display in modals and Currency component updated

Note: Shared service/resource/type changes included in base commit.
Implements GitHub issue HiEventsDev#759 - Abandoned checkout tracking

Tracks orders that remain in RESERVED status past their session timeout
by transitioning them to a new ABANDONED status. Provides visibility into
checkout abandonment rates on the event dashboard.

- New MarkExpiredOrdersAsAbandonedJob scheduled every 5 minutes
- Migration adds orders_abandoned column to event_statistics and
  event_daily_statistics tables
- EventStatisticDomainObject and EventDailyStatistic updated
- EventStatsFetchService aggregates abandoned order counts
- OrderRepository extended with findExpiredReservedOrders method
- Frontend EventDashboard displays abandoned orders in stat boxes and chart
- Frontend types updated with orders_abandoned field

Note: Shared stats/Kernel/type changes included in base commit.
Implements GitHub issue HiEventsDev#187 - Box Office / Walk-in Tickets

Enables event administrators to create orders directly from the admin panel,
bypassing the public checkout flow. Designed for box office, walk-in, and
phone order scenarios.

Backend:
- CreateManualOrderDTO with buyer info, products, promo_code, notes
- CreateManualOrderRequest with full validation rules
- CreateManualOrderHandler: transactional order creation with pg_advisory_lock,
  product availability validation, tax/fee/promo calculation via existing
  OrderItemProcessingService, attendee generation, quantity updates
- CreateManualOrderAction: admin-authenticated endpoint
- POST /events/{event_id}/orders route

Frontend:
- CreateManualOrderModal: full modal with buyer info fields, product cards
  with quantity selectors per price tier, sold-out badges, notes, send
  confirmation toggle
- useCreateManualOrder mutation hook
- 'Create Order' button added to orders page toolbar
- order.client.ts extended with createManualOrder API method

Orders created as COMPLETED with is_manually_created=true, triggering full
event pipeline (statistics, emails, webhooks, invoicing).
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 5, 2026

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

chmunyas added 2 commits April 5, 2026 15:49
HiEventsDev#330, HiEventsDev#698, HiEventsDev#361, HiEventsDev#234, HiEventsDev#335, HiEventsDev#747)

- HiEventsDev#714: Automatic sales report emails (daily/weekly/monthly)
- HiEventsDev#712: Site-wide voucher codes (account-level promo codes)
- HiEventsDev#330: Certificate of attendance PDF download
- HiEventsDev#698: Custom document templates (Liquid-based)
- HiEventsDev#361: Ticket packages/bundles with CRUD
- HiEventsDev#234: Upselling capabilities on products
- HiEventsDev#335: Provisional reservation (book now, pay later)
- HiEventsDev#747: Multi-step checkout wizard configuration

Backend: 8 migrations, 30+ new files, 18 modified files
Frontend: 6 new API clients, types extended for all features
Fix: GetSiteWideVouchersAction paginatedResourceResponse bug
@chmunyas
Copy link
Copy Markdown
Author

chmunyas commented Apr 5, 2026

I have read the CLA Document and I hereby sign the CLA

chmunyas added 4 commits April 5, 2026 16:11
, HiEventsDev#338, HiEventsDev#33, HiEventsDev#32)

- OAuth: Google & Apple login with token verification and account linking
- MFA: TOTP-based multi-factor auth with encrypted secrets, hashed recovery codes
- WebAuthn/Passkeys: Registration and passwordless login with challenge caching
- Private Events: Access code validation with constant-time comparison, data filtering
- Audit logging for all security events (MFA, OAuth, passkey actions)
- 4 migrations: user OAuth/MFA fields, webauthn_credentials, event_settings privacy, mfa_audit_logs
- 15 new API actions with routes, 5 domain services
- Frontend: TypeScript types and API clients for MFA, WebAuthn, OAuth, auth config
- Composer: added pragmarx/google2fa for TOTP support
…rid events

Session 11: Reports, Mobile, PWA & Advanced Features

Reports & Analytics:
- HiEventsDev#744 Attendees by ticket type report (SQL CTE-based)
- HiEventsDev#716 View generated invoices (paginated API endpoint)

Mobile & Apps:
- HiEventsDev#244 PWA support (vite-plugin-pwa, offline, service worker)
- HiEventsDev#236 Flutter mobile app scaffold (check-in, QR scan)
- HiEventsDev#189 Mobile wallet integration (Apple/Google Wallet)
- HiEventsDev#186 QR code printing (PDF labels with DomPDF)

Advanced Features:
- HiEventsDev#1000 Subscribable ICS calendar feed
- HiEventsDev#998 ActivityPub federation support
- HiEventsDev#772 Subscribe to future events
- HiEventsDev#759 Abandoned checkout recovery emails
- HiEventsDev#39 Seating charts (3-table schema, CRUD, assignment)
- HiEventsDev#589 Better hybrid events (per-product attendance mode)

4 migrations (000037-000040), 50+ new files, 75 files total
…memberships, POS, bulk import, Google Maps

Session 12: Tier 2 High Priority Features (Competitive Advantage)

Visual Seating Chart Builder (#7):
- Interactive canvas-based builder with drag-and-drop sections
- Pan/zoom (0.3x-2.5x), section property editor, live seat preview
- API client, React Query hooks, route, and nav item

Gift Cards (#8):
- Batch creation, atomic redemption, balance tracking
- Usage logging per order, public redeem and check-balance endpoints

Memberships & Season Passes (HiEventsDev#9):
- Plans with duration, renewal type, max events, benefits
- Event access control, membership validation endpoint

In-Person Sales / POS (HiEventsDev#10):
- POS sessions with open/close/transaction tracking
- Stripe Terminal integration for card reader support

Bulk Attendee Import (HiEventsDev#11):
- CSV parsing with validation and deduplication
- File upload or inline CSV data support

Google Maps on Event Pages (HiEventsDev#12):
- Venue coordinates with admin UI fields
- Google Maps iframe embed (no API key required)

Social Sharing (HiEventsDev#13): Verified already implemented (WhatsApp, FB, X, etc.)

4 migrations (000041-000044), 47 files changed
@daveearley
Copy link
Copy Markdown
Contributor

Hi @chmunyas,

I appreciate the effort here but I can't accept this PR. It touches ~465 files, adds ~30k lines, and claims to close around 70 issues in one go. That's not reviewable unfortunately.

  • There are no tests. The contributing guide requires them, and a lot of this code is in sensitive areas (auth, MFA, OAuth, payments, order creation).
  • The PR description is the empty template. No summary, no rationale, and none of the referenced issues have any prior discussion about approach.
  • A lot of the features are not finished. Memberships, gift cards, POS, document templates, bundles and
    federation have backend actions but no frontend wired up.
  • Two migrations share prefix 000015, two share 000016, and two share 000019. That may break migrations.
  • Files that shouldn't be in here: ENHANCEMENTS.md, .vscode/settings.json, and a whole Flutter app under mobile/. A new mobile app is a big scope decision that needs its own conversation before any code gets written.

If you want to split this up, I'll happily look at the individual pieces. For each one please:

  1. Link the issue and agree the approach on the issue first for anything non trivial.
  2. Write an actual PR description.
  3. Include tests.
  4. Keep it to one feature, or a tightly related set of changes.
  5. Leave out unrelated files (editor config, planning docs, other platforms).

Closing this one for now. Thanks again for taking an interest in the project.

@daveearley daveearley closed this Apr 5, 2026
@github-actions github-actions bot locked and limited conversation to collaborators Apr 5, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants