diff --git a/web/components/visualization/results-section.js b/web/components/visualization/results-section.js index 7778e851d11a2c2fb2badac70906c2659a0128f5..cbe67306df5580fb0b4b93ac6203dc032177fd69 100644 --- a/web/components/visualization/results-section.js +++ b/web/components/visualization/results-section.js @@ -129,7 +129,7 @@ class ResultComponent { </div>`; } - progressBarTemplate(candidateList, color) { + progressBarTemplate(candidateList, color, electedsNumber) { return /* HTML */ `<div class="progressBar"> <div class="progressBarValue" @@ -141,7 +141,8 @@ class ResultComponent { ? candidateList.VoiceNumber + " votes soit : " : "") + candidateList.Percentage + - "%)"} + "%" + + (electedsNumber != null ? ", " + electedsNumber + " élus" : "")}) </div> </div>`; } @@ -443,6 +444,14 @@ class ResultComponent { document.getElementById("zone-results").innerHTML = '<br/><h5 class="title is-5">Résultats</h5>'; for (let i in zone.candidateLists) { + let electedsNumber = null; + if ( + this.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 ); @@ -450,7 +459,8 @@ class ResultComponent { "zone-results" ).innerHTML += this.progressBarTemplate( zone.candidateLists[i], - party.Color + party.Color, + electedsNumber ); } this.displayZoneDetailedResults(zone); @@ -470,7 +480,8 @@ class ResultComponent { Percentage: zone.stats.PercentageConsiderated, VoiceNumber: null, }, - "grey" + "grey", + null ); document.getElementById( "zone-detaileds-results" @@ -480,7 +491,8 @@ class ResultComponent { Percentage: zone.stats.Abstention, VoiceNumber: null, }, - "grey" + "grey", + null ); document.getElementById( "zone-detaileds-results" @@ -490,7 +502,8 @@ class ResultComponent { Percentage: zone.stats.BlankPercentage, VoiceNumber: zone.stats.BlankVoiceNumber, }, - "grey" + "grey", + null ); document.getElementById( "zone-detaileds-results" @@ -500,7 +513,8 @@ class ResultComponent { Percentage: zone.stats.NullVotePercentage, VoiceNumber: zone.stats.NullVoteVoiceNumber, }, - "grey" + "grey", + null ); if (this.zone === "areas" && zone.stats.PercentageConsiderated == 100) { document.getElementById("zone-detaileds-results").innerHTML += diff --git a/web/services/election/calculate-election-generic.js b/web/services/election/calculate-election-generic.js index 83c3995aa1047a223ac4e6e833d3d4514d7c5381..eed1675625e11f967b3d2e4d12defc0d8f5c9357 100644 --- a/web/services/election/calculate-election-generic.js +++ b/web/services/election/calculate-election-generic.js @@ -240,7 +240,7 @@ class DirectMetropolitanCalculator { }); area.Electeds = this.getElecteds(area); - + area.candidateLists.sort((a, b) => { return b.VoiceNumber - a.VoiceNumber; }); @@ -362,6 +362,7 @@ class DirectMetropolitanCalculator { // order candidates by rank and remove refused or removed candidates area.candidateLists.forEach((candidateList) => { + candidateList.seatNumber = 0; candidateList.Candidates.sort(function (a, b) { return a.Rank - b.Rank; }); @@ -446,6 +447,11 @@ class DirectMetropolitanCalculator { leftSeats -= 1; } + area.candidateLists.sort((a, b) => { + return b.VoiceNumber - a.VoiceNumber; + }); + area.candidateLists[0].SeatsAttributed += seatForFirst; + return electeds; } }