1. 26 Jul, 2026 1 commit
  2. 25 Jul, 2026 14 commits
  3. 24 Jul, 2026 5 commits
    • Mahmoud Aglan's avatar
      Fix guardian relationship_type CHECK violation — use 'father' instead of invalid 'guardian' · 1cae2631
      Mahmoud Aglan authored
      The guardians_relationship_type_check constraint allows: father, mother,
      grandfather, grandmother, uncle, aunt, sibling, legal_guardian, other.
      The ParticipantForm was inserting 'guardian' which isn't a valid value.
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      1cae2631
    • Mahmoud Aglan's avatar
      Allow event deletion from any status + default website is_published to true · a4e6d437
      Mahmoud Aglan authored
      - Remove draft-only restriction on delete button in EventShow
      - EventService::delete() no longer blocks deletion based on status
      - Migration sets website_settings.is_published default to true and updates existing rows
      - Fixes 404 on public event pages caused by unpublished website settings
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      a4e6d437
    • Mahmoud Aglan's avatar
      Upgrade event form builder with 20+ new features — radio, uniqueness, maps, conditionals · ce5c6e89
      Mahmoud Aglan authored
      - Add radio, national_id, location, section_divider, terms field types to FormFieldType enum
      - Add field uniqueness constraint (blocks duplicate registrations per unique field)
      - Add Google Maps locations support (JSONB column + map embed on public page)
      - Add conditional field visibility (show field only when another field equals a value)
      - Add min/max length, min/max value, regex pattern validation per field
      - Add allow_other option for select/radio/multi_select fields
      - Add field description/help text, placeholder, default value
      - Add duplicate field action in form builder
      - Add section dividers for visual grouping
      - Add terms acceptance field type with URL link
      - Sanitize form fields before save (auto-fill values, strip invalid options)
      - Public registration form uses Alpine.js for conditional visibility
      - Character counters shown when max_length is set
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      ce5c6e89
    • Mahmoud Aglan's avatar
      Fix website builder audit issues — missing $sections + forbidden href=# · a26be026
      Mahmoud Aglan authored
      - PublicEventController: pass $sections to views (navbar/footer crash without it)
      - Navbar: replace href="#" with href="#section-hero" (forbidden pattern)
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      a26be026
    • Mahmoud Aglan's avatar
      Add Events/Tournaments system — full vertical slice · 44c8d8aa
      Mahmoud Aglan authored
      Complete events module with admin CRUD, public registration, and management:
      - Migrations: events, event_registrations, media collections, permissions
      - Domain: Event/Enums (5), Models (2), Services (EventService, EventRegistrationService)
      - Admin: EventList, CreateEventWizard (4-step with form builder), EventShow, EventRegistrationList
      - Public: event listing + detail pages under /site/{slug}/events with Livewire registration form
      - Form builder: button-based add/remove/reorder fields stored as JSONB
      - Registration: dynamic validation from form_fields, person matching, registration numbers
      - Admin registrations: dynamic columns, bulk confirm/cancel, CSV export
      - Livewire scripts added to website layout for public forms
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      44c8d8aa
  4. 22 Jul, 2026 11 commits
  5. 20 Jul, 2026 3 commits
    • Mahmoud Aglan's avatar
      Fix schedule builder grid — support grid/lanes/zones layout types · 1b16cf85
      Mahmoud Aglan authored
      The grid was blank because lanes and zones segments have null row_index/col_index.
      The old code assumed all layouts were grid-type and collapsed to 0×0.
      
      - Grid layouts: keep the spreadsheet-style row/col selector view
      - Lanes layouts: render as horizontal strips (label + cell side by side)
      - Zones/custom layouts: responsive card grid (no row/col concept)
      
      Layout type is now read from Facility::activeLayout (new HasOne relationship)
      with a null-safe fallback to row_index detection. Segment cell HTML extracted
      to _segment-cell.blade.php partial to avoid triplication.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      1b16cf85
    • Mahmoud Aglan's avatar
      Fix facilities route ordering — static segments must precede {facility} wildcard · abd15a9b
      Mahmoud Aglan authored
      /facilities/space-assignment and /facilities/schedule-builder were registered
      after /facilities/{facility}, so Laravel matched the wildcard first and tried
      to resolve the literal slugs as UUIDs, crashing with invalid uuid syntax.
      Static routes are now declared before the wildcard.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      abd15a9b
    • Mahmoud Aglan's avatar
      Add installment collection breakdown to product analytics · 8bf5451e
      Mahmoud Aglan authored
      Adds محصّل vs إجمالي الإيرادات with a progress bar and remaining balance.
      Collection is computed as a pro-rata share of invoice.paid_amount based on
      the product line's fraction of the invoice total — so mixed invoices
      (product + program) correctly attribute only the product's share of each
      payment. Price overrides are excluded from the product's line because they
      always land on the program item, leaving the product total_amount intact.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      8bf5451e
  6. 19 Jul, 2026 3 commits
  7. 17 Jul, 2026 3 commits