// Imports import * as Auth from "/services/auth/auth.js"; import * as ElectionModel from "/services/model/election-model.js"; import * as RoundModel from "/services/model/round-model.js"; import * as AreaModel from "/services/model/area-model.js"; import * as SectionModel from "/services/model/section-model.js"; import * as DeskModel from "/services/model/desk-model.js"; import * as DeskRoundModel from "/services/model/deskRound-model.js"; import * as CapturerModel from "/services/model/capturer-model.js"; export async function mount(where, parent) { const deskRoundComponent = new DeskRoundSelector(parent); await deskRoundComponent.mount(where); return deskRoundComponent; } class DeskRoundSelector { constructor(parent) { this.method = null; this.parent = parent; this.ElectionModel = ElectionModel.getElectionModel(); this.RoundModel = RoundModel.getRoundModel(); this.AreaModel = AreaModel.getAreaModel(); this.SectionModel = SectionModel.getSectionModel(); this.DeskModel = DeskModel.getDeskModel(); this.DeskRoundModel = DeskRoundModel.getDeskRoundModel(); this.CapturerModel = CapturerModel.getCapturerModel(); } async mount(where) { this.ElectionModel.current_user = await Auth.GetUser(); this.RoundModel.current_user = await Auth.GetUser(); this.AreaModel.current_user = await Auth.GetUser(); this.SectionModel.current_user = await Auth.GetUser(); this.DeskModel.current_user = await Auth.GetUser(); this.DeskRoundModel.current_user = await Auth.GetUser(); this.CapturerModel.current_user = await Auth.GetUser(); const mountpoint = where; document.getElementById(mountpoint).innerHTML = /* HTML */ ` <header class="card-header"> <p class="card-header-title"> Choix du bureau de vote </p> </header> <div class="card-content"> <div class="columns"> <div class="column"> <div id="select-filters"> <div class="field"> <label>Élection</label><br /> <div class="control select"> <select name="election-select" id="election-select"> <option>Veuillez sélectionner une élection</option> </select> </div> </div> <div class="field"> <label>Tour</label><br /> <div class="control select"> <select name="round-select" id="round-select"> <option>Veuillez sélectionner un tour</option> </select> </div> </div> <div class="field"> <label>Circonscription</label><br /> <div class="control select"> <select name="area-select" id="area-select"> <option>Veuillez sélectionner une circonscription</option> </select> </div> </div> <div class="field"> <label>Section</label><br /> <div class="control select"> <select name="section-select" id="section-select"> <option>Veuillez sélectionner une section</option> </select> </div> </div> </div> </div> <div class="column"> <div id="select-desks"></div> </div> </div> </div> `; await this.loadElection(); } deskRoundTemplate(deskRound) { return /* HTML */ `<div class="card card-list"> <div id="deskrounds-deskround-${deskRound.ID}" class="card-content clickable" > <div class="content"> <nav class="level"> <div id="deskrounds-deskround-desc-${deskRound.ID}" class="level-left" ></div> </nav> </div> </div> </div>`; } async loadElection() { let selectElection = document.getElementById("election-select"); let elections = await this.ElectionModel.getElections(); for (let i = selectElection.options.length - 1; i >= 0; i--) { selectElection.remove(i); } elections.forEach((election) => { let el = document.createElement("option"); el.textContent = election.Name; el.value = election.ID; selectElection.appendChild(el); }); this.ElectionID = elections[0].ID; this.loadRounds(); } async loadRounds() { let deskRoundHandler = this; let selectRound = document.getElementById("round-select"); let rounds = await this.RoundModel.getRounds(); rounds = rounds.filter((round) => { return round.ElectionID == deskRoundHandler.ElectionID; }); rounds.forEach(async (round) => { let election = await this.ElectionModel.getElection(round.ElectionID); let el = document.createElement("option"); el.textContent = election.Name + " (tour : " + round.Round + ", date : " + new Date(round.Date).toLocaleDateString() + ")"; el.value = round.ID; selectRound.appendChild(el); }); } async loadAreas() { let deskRoundHandler = this; let selectArea = document.getElementById("area-select"); let areas = await this.AreaModel.getAreas(); areas = areas.filter((area) => { return area.ElectionID == deskRoundHandler.ElectionID; }); areas.forEach(async (area) => { let el = document.createElement("option"); el.textContent = area.Name; el.value = area.ID; selectArea.appendChild(el); }); } async loadSections() { let deskRoundHandler = this; let selectSection = document.getElementById("section-select"); let sections = await this.SectionModel.getSections(); sections = sections.filter((section) => { return section.AreaID == deskRoundHandler.AreaID; }); sections.forEach((section) => { let el = document.createElement("option"); el.textContent = section.Name; el.value = section.ID; selectSection.appendChild(el); }); } async loadDesks() { let deskRoundHandler = this; let deskRounds = await this.DeskRoundModel.getDeskRounds(); deskRounds = deskRounds.filter((deskRound) => { return deskRound.RoundID == deskRoundHandler.RoundID; }); // Filter the desks to display only the one affected to capturer if (this.DeskRoundModel.current_user.role === "CAPTURER") { let capturer = await this.CapturerModel.getCapturerByUserID( this.DeskRoundModel.current_user.id ); let deskRoundsToKeep = []; for (let i in deskRounds) { for (let j in capturer.DeskRounds) { if (capturer.DeskRounds[j].ID == deskRounds[i].ID) deskRoundsToKeep.push(deskRounds[i]); } } deskRounds = deskRoundsToKeep; } let selectRound = document.getElementById("round-select"); if (selectRound.value == 0) { deskRounds = []; } else { let deskRoundsFiltered = []; let selectArea = document.getElementById("area-select"); if (selectArea.value != 0) { let area = await this.AreaModel.getArea(selectArea.value); for (let i in area.Sections) { for (let deskRound of deskRounds) { let desk = await deskRoundHandler.DeskModel.getDesk( deskRound.DeskID ); if (desk.SectionID == area.Sections[i].ID) deskRoundsFiltered.push(deskRound); } } deskRounds = deskRoundsFiltered; } deskRoundsFiltered = []; let selectSection = document.getElementById("section-select"); if (selectSection.value != 0) { for (let deskRound of deskRounds) { let desk = await deskRoundHandler.DeskModel.getDesk(deskRound.DeskID); if (desk.SectionID == deskRoundHandler.SectionID) deskRoundsFiltered.push(deskRound); } deskRounds = deskRoundsFiltered; } const markup = deskRounds .map((deskRound) => this.deskRoundTemplate(deskRound)) .join(""); document.getElementById("select-desks").innerHTML = markup; deskRounds.map(async (deskRound) => { let desk = await deskRoundHandler.DeskModel.getDesk(deskRound.DeskID); document.getElementById( `deskrounds-deskround-desc-${deskRound.ID}` ).innerHTML = desk.Name; document .getElementById(`deskrounds-deskround-${deskRound.ID}`) .addEventListener("click", async function () { deskRoundHandler.openVotes(deskRound); }); }); } } async openVotes(deskRound) { this.parent.voteHandler.displayVotes( this.RoundID, this.AreaID, deskRound.ID ); } clearRounds() { let selectRound = document.getElementById("round-select"); for (let i = selectRound.options.length - 1; i >= 0; i--) { selectRound.remove(i); } let el = document.createElement("option"); el.textContent = "Veuillez sélectionner un tour"; el.value = 0; selectRound.appendChild(el); } clearAreas() { let selectArea = document.getElementById("area-select"); for (let i = selectArea.options.length - 1; i >= 0; i--) { selectArea.remove(i); } let el = document.createElement("option"); el.textContent = "Veuillez sélectionner une circonscription"; el.value = 0; selectArea.appendChild(el); } clearSections() { let selectSection = document.getElementById("section-select"); for (let i = selectSection.options.length - 1; i >= 0; i--) { selectSection.remove(i); } let el = document.createElement("option"); el.textContent = "Veuillez sélectionner une section"; el.value = 0; selectSection.appendChild(el); } }