iTip: Doorheen de site brengt het Krakkemat-logo je terug naar de startpagina.
KRAKKEMAT
SCHAAKCLUB VELDEGEM
Waar vriendschap en schaakplezier samenkomen
Bij onze club draait alles om het plezier en het leren van schaken, ongeacht je leeftijd of ervaringsniveau. Of je nu net begint of al wat ervaring hebt, je bent bij ons thuis.
Iedereen welkom
Voor ervaren schakers én voor wie het spel wil ontdekken.
Gezellige clubavonden
Samen schaken, praten en lachen in een warme open sfeer.
Toernooien & competitie
Voor wie uitdaging zoekt, organiseren we interne competities en toernooien.
Jeugd & ontwikkeling
We stimuleren jongeren om te groeien in schaakspel én vriendschap.
Heb je een gebroken link, foutieve informatie, ontbrekende foto/partij of technisch probleem ontdekt? Laat het ons weten zodat we de website kunnen verbeteren.
Deze algemene voorwaarden zijn van toepassing op alle betalingen, lidgelden, inschrijvingen en aankopen via de website van KRAKKEMAT Schaakclub.
3. Lidmaatschap
Een lidmaatschap is geldig voor het lopende schaakseizoen tenzij anders vermeld. Het lidgeld geeft toegang tot de activiteiten en voordelen verbonden aan het lidmaatschap.
Het bestuur behoudt zich het recht voor een lidmaatschap te weigeren of stop te zetten bij ernstig wangedrag of niet-naleving van de clubregels.
4. Merchandise
De aangeboden merchandise wordt verkocht zolang de voorraad strekt. Kleuren, afmetingen en afbeeldingen kunnen licht afwijken van de werkelijkheid.
5. Prijzen
Alle prijzen zijn weergegeven in euro (€). Eventuele vrijstelling van btw gebeurt overeenkomstig de Belgische regelgeving voor verenigingen.
6. Betaling
Betalingen verlopen cash of via de beveiligde betaalomgeving van Mollie. Een bestelling of lidmaatschap is pas definitief na succesvolle betaling.
7. Afhaling
Merchandise wordt niet verzonden. Bestellingen worden uitsluitend afgehaald of overhandigd tijdens clubactiviteiten of op een afgesproken moment binnen de clubwerking.
De klant wordt geïnformeerd wanneer de bestelling beschikbaar is.
8. Aansprakelijkheid
KRAKKEMAT Schaakclub is niet aansprakelijk voor indirecte schade, technische storingen of tijdelijke onbeschikbaarheid van de website.
9. Toepasselijk recht
Op deze voorwaarden is het Belgisch recht van toepassing. Geschillen vallen onder de bevoegdheid van de Belgische rechtbanken.
Retour- en annulatiebeleid
Lidgelden. Betaalde lidgelden worden in principe niet terugbetaald nadat het lidmaatschap actief werd gemaakt of de activiteiten gestart zijn. Bij uitzonderlijke omstandigheden kan het bestuur een gedeeltelijke terugbetaling toestaan.
Merchandise. Aangezien de producten uitsluitend via afhaling worden geleverd, dient de klant de bestelling bij ontvangst te controleren. Indien het product defect of verkeerd geleverd werd, voorziet KRAKKEMAT Schaakclub een vervanging of terugbetaling.
Gepersonaliseerde artikelen of gedragen/gebruikte artikelen worden niet teruggenomen.
Annulatie. Een bestelling kan kosteloos geannuleerd worden zolang het artikel nog niet werd voorbereid of gereserveerd voor afhaling.
Betaalmethoden en veiligheid
Betalingen verlopen via Mollie en kunnen onder meer gebeuren met Bancontact en andere betaalmethoden aangeboden door Mollie.
Alle betalingen gebeuren via een beveiligde SSL-verbinding. KRAKKEMAT Schaakclub heeft geen toegang tot of opslag van volledige betaalgegevens.
Bevestiging en beschikbaarheid
Na succesvolle betaling ontvangt de klant een elektronische bevestiging van de betaling of bestelling. Een bestelling of lidmaatschap wordt pas bevestigd na ontvangst van de betaling.
Fraude en misbruik
Bij vermoeden van fraude, misbruik of ongeoorloofde betalingen behoudt KRAKKEMAT Schaakclub zich het recht voor een bestelling of lidmaatschap te weigeren of te annuleren.
Privacyverklaring
Hoe KRAKKEMAT Schaakclub Veldegem omgaat met persoonsgegevens, foto’s, contactgegevens en privacy.
KRAKKEMAT Schaakclub Veldegem hecht veel belang aan de bescherming van uw persoonsgegevens en respecteert uw privacy.
Deze privacyverklaring legt uit welke gegevens wij verzamelen, waarom wij dit doen en hoe wij hiermee omgaan.
Verantwoordelijke voor de verwerking: KRAKKEMAT Schaakclub Veldegem E-mail: [email protected]
2. Welke persoonsgegevens verzamelen wij?
Afhankelijk van uw contact met onze club kunnen wij volgende gegevens verzamelen:
▸ naam en voornaam ▸ e-mailadres ▸ telefoonnummer ▸ adresgegevens ▸ geboortedatum ▸ gegevens ingevuld via contactformulieren ▸ lidmaatschapsgegevens ▸ foto’s genomen tijdens clubactiviteiten
3. Waarom verwerken wij deze gegevens?
Uw gegevens worden uitsluitend gebruikt voor:
▸ beheer van lidmaatschappen ▸ communicatie met leden en bezoekers ▸ organisatie van clubactiviteiten en tornooien ▸ beantwoorden van vragen via het contactformulier ▸ verzenden van praktische informatie ▸ publiceren van sfeerbeelden van clubactiviteiten ▸ verbeteren van de werking van onze website
4. Op basis waarvan verwerken wij uw gegevens?
Wij verwerken persoonsgegevens op basis van:
▸ uw toestemming ▸ de uitvoering van een overeenkomst, zoals een lidmaatschap ▸ het gerechtvaardigd belang van de vereniging ▸ wettelijke verplichtingen
5. Hoe lang bewaren wij uw gegevens?
Persoonsgegevens worden niet langer bewaard dan noodzakelijk voor de doeleinden waarvoor ze verzameld werden.
6. Delen wij gegevens met derden?
Wij delen persoonsgegevens enkel indien noodzakelijk, bijvoorbeeld met:
▸ hostingproviders van de website ▸ e-maildiensten ▸ schaakfederaties indien vereist voor tornooien of aansluiting
7. Gebruik van foto’s
Deze foto’s kunnen gebruikt worden:
▸ op onze website ▸ op sociale media
Wij proberen steeds respectvol om te gaan met beeldmateriaal. Indien u niet wenst dat foto’s waarop u herkenbaar bent gepubliceerd worden, kan u ons steeds contacteren via [email protected].
8. Cookies
Onze website maakt geen gebruik van analytische of externe cookies.
9. Uw rechten
U heeft steeds het recht om:
▸ uw gegevens in te kijken ▸ foutieve gegevens te laten aanpassen ▸ gegevens te laten verwijderen ▸ bezwaar te maken tegen verwerking ▸ uw toestemming in te trekken
Beheer de spelerslijst voor competitiebeheer, PGN Tool en live registratie.
Speler toevoegen / wijzigen
Spelerslijst
0 spelers
Spelerslijst laden...
KRAKKEMAT
Competitie-instellingen
Beheer de instellingen voor clubcompetities, blitzavonden en tornooien.
Competitie toevoegen / wijzigen
Competitie-instellingen worden normaal slechts één keer aangemaakt. Na export moeten ze vervangen worden in "kmsot competitie data" op #homehtml en daarna moet de website opnieuw gepubliceerd worden.
Wanneer "Op ELO" gekozen wordt maar minstens één actieve speler ELO 0 heeft, schakelt de pairing automatisch over naar willekeurig.
Competities
0 competities
Nog geen competities toegevoegd.
✓ Competitie-instellingen werden naar het klembord geschreven
KRAKKEMAT
Rondevoorbereider
Kies de competitie, ronde, datum, aanwezigen en eventuele bye vóór de pairing.
Rondegegevens
Kies een competitie om de rondecontrole uit te voeren.
Status
Aanwezig0
Afwezig0
Bye0
Te pairen0
Bye
Bij een oneven aantal aanwezige spelers moet één speler bye krijgen. Als de competitie dit vereist, kunnen enkel bestuursleden bye krijgen.
Geen bye nodig zolang het aantal aanwezige spelers even is.
✓ Actie uitgevoerd
Aanwezige spelers
Nog geen aanwezige spelers aangeduid.
Afwezige spelers
0 spelers
Geen spelers geladen.
window.kmRoundSetupApp = (function(){ "use strict"; const app = {}; app.STORAGE_KEY = "kmRoundSetup"; app.PLAYERS_URL = "https://api.krakkemat.be/spelers-lezen.php"; app.COMPETITIONS_URL = "https://api.krakkemat.be/competities-lezen.php"; app.ROUNDS_URL = "https://api.krakkemat.be/rondes-lezen.php"; /*================================================== DATA ==================================================*/ app.players = []; app.competitions = []; app.rounds = []; app.presentPlayers = []; app.absentPlayers = []; app.byePlayer = null; /*================================================== ELEMENTEN ==================================================*/ app.el = { competition: document.getElementById("kmRoundCompetition"), round: document.getElementById("kmRoundNumber"), date: document.getElementById("kmRoundDate"), controlMessage: document.getElementById("kmRoundControlMessage"), presentCount: document.getElementById("kmRoundPresentCount"), absentCount: document.getElementById("kmRoundAbsentCount"), byeCount: document.getElementById("kmRoundByeCount"), pairingCount: document.getElementById("kmRoundPairingCount"), presentList: document.getElementById("kmRoundPresentList"), absentList: document.getElementById("kmRoundAbsentList"), byeSelect: document.getElementById("kmRoundByePlayer"), byeMessage: document.getElementById("kmRoundByeMessage"), search: document.getElementById("kmRoundPlayerSearch"), playerCount: document.getElementById("kmRoundPlayerCount"), nextRoundBtn: document.getElementById("kmNextRoundBtn"), saveBtn: document.getElementById("kmSaveRoundSetupBtn"), clearBtn: document.getElementById("kmClearRoundSetupBtn"), saveMessage: document.getElementById("kmRoundSaveMessage") }; /*================================================== LADEN ==================================================*/ app.loadPlayers = async function(){ try{ const response = await fetch( app.PLAYERS_URL, { method: "GET", cache: "no-store" } ); if(!response.ok){ throw new Error( "HTTP " + response.status ); } const data = await response.json(); if( !data || !Array.isArray(data.players) ){ throw new Error( "Ongeldige spelersdata" ); } app.players = data.players .filter(function(player){ return player.active === true; }) .slice(); return true; }catch(error){ console.error( "Rondevoorbereider: spelers laden mislukt:", error ); app.players = []; if(app.el.controlMessage){ app.el.controlMessage.textContent = "De spelerslijst kon niet geladen worden."; } return false; } }; app.loadCompetitions = async function(){ try{ const response = await fetch( app.COMPETITIONS_URL, { method: "GET", cache: "no-store" } ); if(!response.ok){ throw new Error( "HTTP " + response.status ); } const data = await response.json(); if( !data || !Array.isArray(data.competitions) ){ throw new Error( "Ongeldige competitiedata" ); } app.competitions = data.competitions.slice(); return true; }catch(error){ console.error( "Rondevoorbereider: competities laden mislukt:", error ); app.competitions = []; if(app.el.controlMessage){ app.el.controlMessage.textContent = "De competitie-instellingen konden niet geladen worden."; } return false; } }; app.loadRounds = async function(){ try{ const response = await fetch( app.ROUNDS_URL, { method: "GET", cache: "no-store" } ); if(!response.ok){ throw new Error( "HTTP " + response.status ); } const data = await response.json(); if( !data || !Array.isArray(data.rounds) ){ throw new Error( "Ongeldige rondehistoriek" ); } app.rounds = data.rounds.slice(); return true; }catch(error){ console.error( "Rondevoorbereider: rondehistoriek laden mislukt:", error ); app.rounds = []; if(app.el.controlMessage){ app.el.controlMessage.textContent = "De rondehistoriek kon niet geladen worden."; } return false; } }; /*================================================== COMPETITIES ==================================================*/ app.fillCompetitionSelect = function(){ const select = app.el.competition; select.innerHTML = ''; app.competitions.forEach(function(comp){ const option = document.createElement("option"); option.value = comp.id; option.textContent = comp.name; select.appendChild(option); }); }; /*================================================== RONDECONTROLE ==================================================*/ app.getLastRound = function(competitionId){ let last = 0; app.rounds.forEach(function(round){ const roundCompetitionId = String( round.competitionId ?? round.c ?? "" ); const roundNumber = Number( round.round ?? round.r ?? 0 ); if( roundCompetitionId === competitionId && roundNumber > last ){ last = roundNumber; } }); return last; }; app.updateRoundControl = function(){ const competitionId = app.el.competition.value; if(!competitionId){ app.el.controlMessage.textContent = "Kies eerst een competitie."; return; } const comp = app.getCompetition(); if(!comp){ app.el.controlMessage.textContent = "Competitie niet gevonden."; return; } const historicalLast = app.getLastRound( competitionId ); const singleDay = app.isSingleDayCompetition(comp); /*================================================== LANGDURIGE COMPETITIE Enige bron voor vorige rondes: window.kmCompetitionRounds ==================================================*/ if(!singleDay){ const expected = historicalLast + 1; if(!app.readRound()){ app.writeRound( expected ); } const current = app.readRound(); if(current === expected){ app.el.controlMessage.textContent = historicalLast > 0 ? "Laatste gespeelde ronde is " + historicalLast + ". Volgende ronde is " + expected + "." : "Dit is de eerste ronde van deze competitie."; return; } if(current <= historicalLast){ app.el.controlMessage.textContent = "FOUT: ronde " + current + " bestaat reeds in de gepubliceerde historiek."; return; } app.el.controlMessage.textContent = "FOUT: volgende ronde moet ronde " + expected + " zijn."; return; } /*================================================== 1 DAG / BLITZ Hier mag de lokale voorbereiding wel mee bepalen waar de avond gebleven is. ==================================================*/ let savedRound = 0; try{ const raw = localStorage.getItem( app.STORAGE_KEY ); const saved = raw ? JSON.parse(raw) : null; if( saved && saved.competitionId === competitionId ){ savedRound = Number(saved.round) || 0; } }catch(e){} const lastKnown = Math.max( historicalLast, savedRound ); const expected = lastKnown + 1; if(!app.readRound()){ app.writeRound( expected ); } const current = app.readRound(); if( savedRound > 0 && current === savedRound ){ app.el.controlMessage.textContent = "Ronde " + current + " is de huidige ronde van deze blitz/ééndagscompetitie."; return; } if(current === expected){ app.el.controlMessage.textContent = "Volgende ronde is correct (" + expected + ")."; return; } if(current <= historicalLast){ app.el.controlMessage.textContent = "FOUT: ronde " + current + " bestaat reeds in de historiek."; return; } app.el.controlMessage.textContent = "FOUT: volgende ronde moet ronde " + expected + " zijn."; }; app.escapeHtml = function(value){ return String(value); }; return app; })();