feat(crm): event-type dropdown on quotes; quote→event uses it (no more hardcoded 'wedding')

Quotes now carry an event type (migration 146: quotes.event_type, the
event_types.slug_prefix), chosen from the active event-types catalog in the
quote editor's Event section. convertToEvent reads it instead of the
unconditional hardcoded 'wedding': quote.event_type → crm_default_event_type
setting → 'wedding' as last-resort seeded fallback. When the booking flow's
prepare_event is wired, it reads the same field.

Backend: createQuote/updateQuote persist event_type (hasColumn-guarded);
adminQuotes route accepts + returns eventType. Frontend: FormState + payload +
load + a catalog-sourced dropdown ("— Use default —"); EN/DE strings.
This commit is contained in:
Luca
2026-06-23 17:52:50 +02:00
parent 182e655fcf
commit f78671fc6c
7 changed files with 78 additions and 2 deletions
+2 -1
View File
@@ -86,6 +86,7 @@ function transformQuote(q) {
validUntil: q.valid_until,
eventName: q.event_name,
eventDate: q.event_date,
eventType: q.event_type ?? null,
eventTimeStart: q.event_time_start,
eventTimeEnd: q.event_time_end,
expectedDurationHours: q.expected_duration_hours == null ? null : Number(q.expected_duration_hours),
@@ -212,7 +213,7 @@ function mapPayloadToService(body) {
customerAccountId: 'customerAccountId',
language: 'language', currency: 'currency',
issueDate: 'issueDate', validUntil: 'validUntil',
eventName: 'eventName', eventDate: 'eventDate',
eventName: 'eventName', eventDate: 'eventDate', eventType: 'eventType',
eventTimeStart: 'eventTimeStart', eventTimeEnd: 'eventTimeEnd',
expectedDurationHours: 'expectedDurationHours',
paymentTermTemplateId: 'paymentTermTemplateId',