Files
crewli/resources/Crewli - Artist Timetable Management/data.js

160 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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 };
})();