diff --git a/web/components/vote/desk-round.js b/web/components/vote/desk-round.js
index 5aab8ce9dff710d02951baae999b2bbc1bc53d88..34d08b50f32d314ee053c1e5513493b0bd1cba27 100644
--- a/web/components/vote/desk-round.js
+++ b/web/components/vote/desk-round.js
@@ -1,5 +1,11 @@
 // 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";
 
 export async function mount(where, parent) {
   const deskRoundComponent = new DeskRoundSelector(parent);
@@ -11,9 +17,21 @@ 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();
   }
 
   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();
     const mountpoint = where;
     document.getElementById(mountpoint).innerHTML = /* HTML */ `
       <header class="card-header">
@@ -24,16 +42,186 @@ class DeskRoundSelector {
       <div class="card-content">
         <div class="columns">
           <div class="column">
-            <div id="select-filters" class="card"></div>
+            <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>
           </div>
           <div class="column">
-            <div id="select-desks" class="card"></div>
+            <div id="select-desks"></div>
           </div>
         </div>
       </div>
     `;
     this.handleDom();
+    await this.loadElection();
   }
 
-  handleDom() {}
+  deskRoundTemplate(deskRound) {
+    return /* HTML */ `<div class="card card-list">
+      <div id="deskrounds-deskround-${deskRound.ID}" class="card-content">
+        <div class="content">
+          <nav class="level">
+            <div
+              id="deskrounds-deskround-desc-${deskRound.ID}"
+              class="level-left"
+            ></div>
+          </nav>
+        </div>
+      </div>
+    </div>`;
+  }
+
+  handleDom() {
+    let deskRoundHandler = this;
+    document.addEventListener(
+      "input",
+      function (event) {
+        if (event.target.id === "election-select") {
+          deskRoundHandler.loadRounds(event.target.value);
+        }
+        if (event.target.id === "round-select") {
+          deskRoundHandler.loadAreas(event.target.value);
+        }
+        if (event.target.id === "area-select") {
+          deskRoundHandler.loadDesks(event.target.value);
+        }
+      },
+      false
+    );
+  }
+
+  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.loadRounds(elections[0].ID);
+  }
+
+  async loadRounds(ElectionID) {
+    this.ElectionID = ElectionID;
+    let deskRoundHandler = this;
+    let selectRound = document.getElementById("round-select");
+    let rounds = await this.RoundModel.getRounds();
+    rounds.filter((round) => {
+      return round.ElectionID == deskRoundHandler.ElectionID;
+    });
+
+    for (let i = selectRound.options.length - 1; i >= 0; i--) {
+      selectRound.remove(i);
+    }
+    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);
+    });
+
+    this.loadAreas(rounds[0].ID);
+  }
+
+  async loadAreas(RoundID) {
+    this.RoundID = RoundID;
+    let deskRoundHandler = this;
+    let selectArea = document.getElementById("area-select");
+    let areas = await this.AreaModel.getAreas();
+    areas = areas.filter((area) => {
+      return area.ElectionID == deskRoundHandler.ElectionID;
+    });
+
+    for (let i = selectArea.options.length - 1; i >= 0; i--) {
+      selectArea.remove(i);
+    }
+    areas.forEach(async (area) => {
+      let el = document.createElement("option");
+      el.textContent = area.Name;
+      el.value = area.ID;
+      selectArea.appendChild(el);
+    });
+
+    this.loadDesks(areas[0].ID);
+  }
+
+  async loadDesks(AreaID) {
+    this.AreaID = AreaID;
+    let deskRoundHandler = this;
+    let deskRounds = await this.DeskRoundModel.getDeskRounds();
+    deskRounds = deskRounds.filter((deskRound) => {
+      return deskRound.RoundID == deskRoundHandler.RoundID;
+    });
+    let deskRoundsFiltered = [];
+    for (let deskRound of deskRounds) {
+      let desk = await deskRoundHandler.DeskModel.getDesk(deskRound.DeskID);
+      let section = await deskRoundHandler.SectionModel.getSection(
+        desk.SectionID
+      );
+      if (section.AreaID == deskRoundHandler.AreaID)
+        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
+    );
+    console.log("Ouverture des votes");
+  }
 }
diff --git a/web/components/vote/votes.js b/web/components/vote/votes.js
index 5fbbdfc43872cbe1f4ef157c6135fe94caa27672..fb806024523ab5032bab28c5adecce76b99cf1d5 100644
--- a/web/components/vote/votes.js
+++ b/web/components/vote/votes.js
@@ -11,4 +11,6 @@ class Vote {
     this.method = null;
     this.parent = parent;
   }
+
+  async displayVotes(RoundID, AreaID, DeskRoundID) {}
 }