Skip to content
Snippets Groups Projects
results-detaileds.js 6.96 KiB
Newer Older
// Imports
import * as Auth from "/services/auth/auth.js";
import * as PartyModel from "/services/model/party-model.js";
import * as CandidateListModel from "/services/model/candidateList-model.js";
import * as AreaModel from "/services/model/area-model.js";
import * as Common from "/services/common/common.js";

export async function mount(parent) {
  const detailedsResultsComponent = new DetailedsResultsComponent(parent);
  return detailedsResultsComponent;
}

class DetailedsResultsComponent {
  constructor(parent) {
    this.parent = parent;
    this.PartyModel = PartyModel.getPartyModel();
    this.CandidateListModel = CandidateListModel.getCandidateListModel();

    let resultHandler = this;
    document.addEventListener(
      "input",
      function __listener(event) {
        if (event.target.id == "select-areas") {
          if (event.target.value != 0) {
            let area = resultHandler.parent.parent.results.areasResults.find(
              (areaFind) => areaFind.ID == event.target.value
            );

            if (resultHandler.parent.parent.zone === "areas") {
              resultHandler.displayZoneResults(area);
              resultHandler.parent.areaDisplayed = area;
            } else if (resultHandler.parent.parent.zone === "sections") {
              resultHandler.parent.refreshSections(area);
              resultHandler.displayZoneResults(area.Sections[0]);
              resultHandler.parent.areaDisplayed = area;
              resultHandler.parent.sectionDisplayed = area.Sections[0];
            }
          }
        } else if (event.target.id == "select-sections") {
          let area = resultHandler.parent.parent.results.areasResults.find(
            (areaFind) =>
              areaFind.ID == document.getElementById("select-areas").value
          );
          let section = area.Sections.find(
            (sectionFind) => sectionFind.ID == event.target.value
          );
          resultHandler.displayZoneResults(section);
          resultHandler.parent.sectionDisplayed = section;
        }
      },
      false
    );
  }

  displayAreasResults() {
    this.parent.refreshAreas();
    document.getElementById("select-sections").parentNode.style.display =
      "none";

    if (
      this.parent.parent.zone == "areas" &&
      this.parent.areaDisplayed != undefined
    ) {
      document.getElementById(
        "select-areas"
      ).value = this.parent.areaDisplayed.ID;
      this.displayZoneResults(this.parent.areaDisplayed);
    } else this.displayZoneResults(this.parent.parent.results.areasResults[0]);
  }

  displaySectionsResults() {
    this.parent.refreshAreas();
    document.getElementById("select-sections").parentNode.style.display =
      "block";
    this.parent.refreshSections(this.parent.parent.results.areasResults[0]);

    if (
      this.parent.parent.zone == "sections" &&
      this.parent.sectionDisplayed != undefined
    ) {
      document.getElementById(
        "select-areas"
      ).value = this.parent.areaDisplayed.ID;
      this.parent.refreshSections(this.parent.areaDisplayed);
      document.getElementById(
        "select-sections"
      ).value = this.parent.sectionDisplayed.ID;
      this.displayZoneResults(this.parent.sectionDisplayed);
    } else {
      this.displayZoneResults(
        this.parent.parent.results.areasResults[0].Sections[0]
      );
    }
  }

  async displayZoneResults(zone) {
    if (zone.status !== this.parent.parent.filter) {
      if (zone.status == "no_results") {
        document.getElementById(
          "zone-results"
        ).innerHTML = Common.warningMessage(
          "Pas de résultats",
          "Aucun résultats n'ont étaient saisis sur cette zone"
        );
      } else if (zone.status == "incompleted") {
        document.getElementById(
          "zone-results"
        ).innerHTML = Common.warningMessage(
          "Pas complets",
          "Les résultats pour cette zone ne sont pas complets"
        );
      } else if (zone.status == "not validated") {
        document.getElementById(
          "zone-results"
        ).innerHTML = Common.warningMessage(
          "Non validé",
          "Les résultats pour cette zone n'ont pas étaient validés"
        );
      }
      document.getElementById("zone-detaileds-results").innerHTML = "";
    } else {
      document.getElementById("zone-results").innerHTML =
        '<br/><h5 class="title is-5">Résultats de ' + zone.Name + "</h5>";
      for (let i in zone.candidateLists) {
        let electedsNumber = null;
        if (
          this.parent.parent.zone === "areas" &&
          zone.candidateLists[i].SeatsAttributed > 0 &&
          zone.stats.PercentageConsiderated == 100
        ) {
          electedsNumber = zone.candidateLists[i].SeatsAttributed;
        }
        let party = await this.PartyModel.getParty(
          zone.candidateLists[i].PartyID
        );
        document.getElementById(
          "zone-results"
        ).innerHTML += this.parent.parent.progressBarTemplate(
          zone.candidateLists[i],
          party.Color,
          electedsNumber
        );
      }
      this.displayZoneDetailedResults(zone);
    }
  }

  async displayZoneDetailedResults(zone) {
    document.getElementById("zone-detaileds-results").innerHTML =
      '<br/><h5 class="title is-5">Statistiques</h5>';

    if (this.parent.parent.filter === "partial")
      document.getElementById(
        "zone-detaileds-results"
      ).innerHTML += this.parent.parent.progressBarTemplate(
        {
          Name: "Pourcentage de saisie",
          Percentage: zone.stats.PercentageConsiderated,
          VoiceNumber: null,
        },
        "grey",
        null
      );
    document.getElementById(
      "zone-detaileds-results"
    ).innerHTML += this.parent.parent.progressBarTemplate(
      {
        Name: "Abstention",
        Percentage: zone.stats.Abstention,
        VoiceNumber: null,
      },
      "grey",
      null
    );
    document.getElementById(
      "zone-detaileds-results"
    ).innerHTML += this.parent.parent.progressBarTemplate(
      {
        Name: "Votes blancs",
        Percentage: zone.stats.BlankPercentage,
        VoiceNumber: zone.stats.BlankVoiceNumber,
      },
      "grey",
      null
    );
    document.getElementById(
      "zone-detaileds-results"
    ).innerHTML += this.parent.parent.progressBarTemplate(
      {
        Name: "Votes nuls",
        Percentage: zone.stats.NullVotePercentage,
        VoiceNumber: zone.stats.NullVoteVoiceNumber,
      },
      "grey",
      null
    );
    if (
      this.parent.parent.zone === "areas" &&
      zone.stats.PercentageConsiderated == 100
    ) {
      document.getElementById("zone-detaileds-results").innerHTML +=
        '<br/><h5 class="title is-5">Élus</h5>';
      for (let i in zone.Electeds) {
        let candidateList = await this.CandidateListModel.getCandidateList(
          zone.Electeds[i].CandidateListID
        );
        document.getElementById("zone-detaileds-results").innerHTML +=
          zone.Electeds[i].FullName + " (" + candidateList.Name + ")<br/>";
      }
    }
  }
}