160 lines
12 KiB
JavaScript
160 lines
12 KiB
JavaScript
// Echt Zomer Feesten 2026 - demo data
|
||
// Schema mirrors Crewli §3.5.7: stages, stage_days, artists, performances
|
||
|
||
window.CrewliData = (function () {
|
||
const EVENT = {
|
||
id: "ezf_2026",
|
||
name: "Echt Zomer Feesten",
|
||
edition: "2026",
|
||
sub_event_label: "dag", // configurable in Crewli — could be "dag", "deelevent", "fase", etc.
|
||
days: [
|
||
{ id: "d_fr", date: "2026-07-10", label: "Vrijdag", short: "Vr" },
|
||
{ id: "d_sa", date: "2026-07-11", label: "Zaterdag", short: "Za" },
|
||
],
|
||
};
|
||
|
||
// Stages — physical platforms. color is the stage swatch (used as left-band on row)
|
||
const STAGES = [
|
||
{ id: "s_hardstyle", name: "Hardstyle District", color: "#e85d75", capacity: 4500 },
|
||
{ id: "s_techno", name: "Techno × House", color: "#7a8af0", capacity: 3000 },
|
||
{ id: "s_hollandse", name: "Hollandse Hoek", color: "#f0a04b", capacity: 5000 },
|
||
{ id: "s_urban", name: "Echt Urban", color: "#5fc9a8", capacity: 2800 },
|
||
{ id: "s_silent", name: "Silent Disco", color: "#c89af0", capacity: 800 },
|
||
{ id: "s_schirm", name: "Schirmbar", color: "#e8d05f", capacity: 600 },
|
||
];
|
||
|
||
// stage_days pivot: which stages run on which day
|
||
const STAGE_DAYS = [
|
||
// Vrijdag
|
||
{ stage_id: "s_hardstyle", day_id: "d_fr" },
|
||
{ stage_id: "s_techno", day_id: "d_fr" },
|
||
{ stage_id: "s_silent", day_id: "d_fr" },
|
||
{ stage_id: "s_schirm", day_id: "d_fr" },
|
||
// Zaterdag
|
||
{ stage_id: "s_hollandse", day_id: "d_sa" },
|
||
{ stage_id: "s_urban", day_id: "d_sa" },
|
||
{ stage_id: "s_silent", day_id: "d_sa" },
|
||
{ stage_id: "s_schirm", day_id: "d_sa" },
|
||
];
|
||
|
||
// Advance sections (per artist, configurable in real schema; here we use a
|
||
// pragmatic standard set so the popover dots have meaning)
|
||
const ADVANCE_SECTIONS = [
|
||
{ key: "tour", label: "Tourmanager" },
|
||
{ key: "hosp", label: "Hospitality" },
|
||
{ key: "travel", label: "Travel party" },
|
||
{ key: "flight", label: "Flight" },
|
||
{ key: "rider", label: "Tech rider" },
|
||
];
|
||
|
||
// Artists. `draw` = expected pull (for capacity warnings). `advance` = which
|
||
// sections are completed (just demo state for the popover).
|
||
// Genres (closed list — drives filters in the wachtrij and the small label on blocks)
|
||
const GENRES = ["Hardstyle", "Techno", "House", "Hollands", "Pop", "Urban", "Disco", "Aprés"];
|
||
|
||
const ARTISTS = [
|
||
{ id: "a_1", name: "D-Block & S-te-Fan", initials: "DS", genre: "Hardstyle", draw: 4200, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } },
|
||
{ id: "a_2", name: "Sub Zero Project", initials: "SZ", genre: "Hardstyle", draw: 3800, advance: { tour: true, hosp: true, travel: false, flight: false, rider: true } },
|
||
{ id: "a_3", name: "Warface", initials: "WF", genre: "Hardstyle", draw: 3000, advance: { tour: true, hosp: false, travel: false, flight: false, rider: false } },
|
||
{ id: "a_4", name: "Devin Wild", initials: "DW", genre: "Hardstyle", draw: 2400, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } },
|
||
|
||
{ id: "a_5", name: "Reinier Zonneveld", initials: "RZ", genre: "Techno", draw: 2800, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } },
|
||
{ id: "a_6", name: "Boris Brejcha", initials: "BB", genre: "Techno", draw: 3200, advance: { tour: true, hosp: true, travel: false, flight: true, rider: true } },
|
||
{ id: "a_7", name: "Mau P", initials: "MP", genre: "House", draw: 2200, advance: { tour: true, hosp: false, travel: false, flight: false, rider: true } },
|
||
|
||
{ id: "a_8", name: "Snollebollekes", initials: "SB", genre: "Hollands", draw: 5200, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } },
|
||
{ id: "a_9", name: "Mart Hoogkamer", initials: "MH", genre: "Hollands", draw: 3600, advance: { tour: true, hosp: true, travel: false, flight: false, rider: true } },
|
||
{ id: "a_10", name: "Suzan & Freek", initials: "SF", genre: "Pop", draw: 4800, advance: { tour: false, hosp: false, travel: false, flight: false, rider: false } },
|
||
{ id: "a_11", name: "Frans Duijts", initials: "FD", genre: "Hollands", draw: 2600, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } },
|
||
|
||
{ id: "a_12", name: "Bizzey", initials: "BZ", genre: "Urban", draw: 2400, advance: { tour: true, hosp: true, travel: true, flight: false, rider: true } },
|
||
{ id: "a_13", name: "Frenna", initials: "FN", genre: "Urban", draw: 2800, advance: { tour: true, hosp: true, travel: false, flight: false, rider: false } },
|
||
{ id: "a_14", name: "Kris Kross Amsterdam", initials: "KK", genre: "Pop", draw: 2200, advance: { tour: true, hosp: false, travel: false, flight: false, rider: true } },
|
||
|
||
{ id: "a_15", name: "DJ Marlon", initials: "DM", genre: "Disco", draw: 600, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } },
|
||
{ id: "a_16", name: "DJ Senna", initials: "DS", genre: "Disco", draw: 500, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } },
|
||
|
||
{ id: "a_17", name: "Café Catootje", initials: "CC", genre: "Aprés", draw: 400, advance: { tour: true, hosp: true, travel: true, flight: true, rider: true } },
|
||
{ id: "a_18", name: "Apré Heroes", initials: "AH", genre: "Aprés", draw: 350, advance: { tour: false, hosp: true, travel: false, flight: true, rider: false } },
|
||
];
|
||
|
||
// Performances — booking_status: concept | requested | option | confirmed | contracted | cancelled
|
||
// Times are minutes since the day's anchor (14:00). End times are minute offsets too.
|
||
// To keep math simple we use the same minute-grid for both days.
|
||
const PERFORMANCES = [
|
||
// ─── Vrijdag · Hardstyle District (s_hardstyle, d_fr) ─────────────
|
||
{ id: "p_1", artist_id: "a_3", stage_id: "s_hardstyle", day_id: "d_fr", start: 240, end: 360, status: "confirmed" }, // 18:00-20:00
|
||
{ id: "p_2", artist_id: "a_4", stage_id: "s_hardstyle", day_id: "d_fr", start: 360, end: 480, status: "confirmed" }, // 20:00-22:00
|
||
{ id: "p_3", artist_id: "a_2", stage_id: "s_hardstyle", day_id: "d_fr", start: 480, end: 600, status: "contracted" }, // 22:00-00:00
|
||
// Concept-fase: 3 parallelle aanvragen voor de 00:00-02:00 slot — pas één wordt vastgelegd
|
||
{ id: "p_4", artist_id: "a_1", stage_id: "s_hardstyle", day_id: "d_fr", start: 600, end: 720, status: "option" }, // 00:00-02:00
|
||
{ id: "p_4b", artist_id: "a_2", stage_id: "s_hardstyle", day_id: "d_fr", start: 600, end: 720, status: "requested" }, // 00:00-02:00 (parallel aanvraag)
|
||
{ id: "p_4c", artist_id: "a_4", stage_id: "s_hardstyle", day_id: "d_fr", start: 615, end: 705, status: "concept" }, // 00:15-01:45 (alternatief concept)
|
||
|
||
// ─── Vrijdag · Techno × House (s_techno, d_fr) ────────────────────
|
||
{ id: "p_5", artist_id: "a_7", stage_id: "s_techno", day_id: "d_fr", start: 300, end: 420, status: "confirmed" }, // 19:00-21:00
|
||
{ id: "p_6", artist_id: "a_5", stage_id: "s_techno", day_id: "d_fr", start: 420, end: 555, status: "contracted" }, // 21:00-23:15
|
||
{ id: "p_7", artist_id: "a_6", stage_id: "s_techno", day_id: "d_fr", start: 555, end: 690, status: "requested" }, // 23:15-01:30
|
||
|
||
// ─── Vrijdag · Silent Disco (s_silent, d_fr) ──────────────────────
|
||
{ id: "p_8", artist_id: "a_15", stage_id: "s_silent", day_id: "d_fr", start: 360, end: 540, status: "confirmed" }, // 20:00-23:00
|
||
{ id: "p_9", artist_id: "a_16", stage_id: "s_silent", day_id: "d_fr", start: 540, end: 720, status: "confirmed" }, // 23:00-02:00
|
||
|
||
// ─── Vrijdag · Schirmbar (s_schirm, d_fr) ─────────────────────────
|
||
{ id: "p_10", artist_id: "a_17", stage_id: "s_schirm", day_id: "d_fr", start: 180, end: 360, status: "confirmed" }, // 17:00-20:00
|
||
{ id: "p_11", artist_id: "a_18", stage_id: "s_schirm", day_id: "d_fr", start: 360, end: 540, status: "concept" }, // 20:00-23:00
|
||
|
||
// ─── Zaterdag · Hollandse Hoek (s_hollandse, d_sa) ────────────────
|
||
{ id: "p_12", artist_id: "a_11", stage_id: "s_hollandse", day_id: "d_sa", start: 240, end: 345, status: "confirmed" }, // 18:00-19:45
|
||
{ id: "p_13", artist_id: "a_9", stage_id: "s_hollandse", day_id: "d_sa", start: 345, end: 465, status: "confirmed" }, // 19:45-21:45
|
||
{ id: "p_14", artist_id: "a_10", stage_id: "s_hollandse", day_id: "d_sa", start: 465, end: 600, status: "option" }, // 21:45-00:00 (cap warning - draw 4800 vs 5000)
|
||
{ id: "p_15", artist_id: "a_8", stage_id: "s_hollandse", day_id: "d_sa", start: 600, end: 720, status: "contracted" }, // 00:00-02:00 (cap warning — draw 5200 > 5000)
|
||
|
||
// ─── Zaterdag · Echt Urban (s_urban, d_sa) ────────────────────────
|
||
{ id: "p_16", artist_id: "a_14", stage_id: "s_urban", day_id: "d_sa", start: 300, end: 420, status: "confirmed" }, // 19:00-21:00
|
||
{ id: "p_17", artist_id: "a_13", stage_id: "s_urban", day_id: "d_sa", start: 420, end: 540, status: "confirmed" }, // 21:00-23:00
|
||
{ id: "p_18", artist_id: "a_12", stage_id: "s_urban", day_id: "d_sa", start: 540, end: 660, status: "requested" }, // 23:00-01:00
|
||
|
||
// Demo conflict: two performances overlapping on Echt Urban
|
||
{ id: "p_19", artist_id: "a_7", stage_id: "s_urban", day_id: "d_sa", start: 510, end: 600, status: "concept" }, // 22:30-00:00 overlap with Frenna
|
||
|
||
// ─── Zaterdag · Silent Disco (s_silent, d_sa) ─────────────────────
|
||
{ id: "p_20", artist_id: "a_16", stage_id: "s_silent", day_id: "d_sa", start: 360, end: 540, status: "confirmed" },
|
||
{ id: "p_21", artist_id: "a_15", stage_id: "s_silent", day_id: "d_sa", start: 540, end: 720, status: "confirmed" },
|
||
|
||
// ─── Zaterdag · Schirmbar (s_schirm, d_sa) ────────────────────────
|
||
{ id: "p_22", artist_id: "a_18", stage_id: "s_schirm", day_id: "d_sa", start: 180, end: 360, status: "concept" },
|
||
{ id: "p_23", artist_id: "a_17", stage_id: "s_schirm", day_id: "d_sa", start: 360, end: 540, status: "confirmed" },
|
||
];
|
||
|
||
// ─── Parked performances (stage_id === null) ─────────────────────
|
||
// Artists picked up but not yet placed on a stage. Day-id keeps day-context.
|
||
const PARKED = [
|
||
{ id: "pk_1", artist_id: "a_5", stage_id: null, day_id: "d_fr", start: 480, end: 600, status: "option" },
|
||
{ id: "pk_2", artist_id: "a_13", stage_id: null, day_id: "d_sa", start: 540, end: 660, status: "requested" },
|
||
{ id: "pk_3", artist_id: "a_7", stage_id: null, day_id: "d_fr", start: 420, end: 540, status: "concept" },
|
||
{ id: "pk_4", artist_id: "a_9", stage_id: null, day_id: "d_sa", start: 360, end: 450, status: "confirmed" },
|
||
{ id: "pk_5", artist_id: "a_11", stage_id: null, day_id: "d_fr", start: 600, end: 690, status: "contracted" },
|
||
];
|
||
|
||
// ─── Pending availability requests ───────────────────────────────
|
||
// Artists waarvoor beschikbaarheid is opgevraagd maar nog geen tijdvak gekozen.
|
||
const PENDING = [
|
||
{ id: "pa_1", artist_id: "a_6", day_id: "d_fr", requested_on: "2026-04-12", note: "Wachten op terugkoppeling agent" },
|
||
{ id: "pa_2", artist_id: "a_8", day_id: "d_sa", requested_on: "2026-04-08", note: "Beschikbaar — wacht op fee-onderhandeling" },
|
||
{ id: "pa_3", artist_id: "a_12", day_id: "d_sa", requested_on: "2026-04-15", note: "Boeking via Top Notch" },
|
||
{ id: "pa_4", artist_id: "a_10", day_id: "d_fr", requested_on: "2026-04-18", note: "Optie tot 30 april" },
|
||
];
|
||
|
||
// Time grid: 14:00 -> 03:00 next day = 13 hours = 780 minutes
|
||
// start=0 means 14:00, start=600 means 00:00, start=780 means 03:00
|
||
const TIME = {
|
||
startHour: 14, // grid starts at 14:00
|
||
totalMinutes: 780, // 13 hours
|
||
snapMinutes: 15, // drag snap
|
||
cellMinutes: 30, // grid cell width
|
||
};
|
||
|
||
return { EVENT, STAGES, STAGE_DAYS, ADVANCE_SECTIONS, ARTISTS, GENRES, PERFORMANCES, PARKED, PENDING, TIME };
|
||
})();
|