diff --git a/web/components/vote/votes.js b/web/components/vote/votes.js index f1a63dfced0c879bfda37ce72c57a534d892e399..ed5c48d33a4f20a25ec54bbe9b1e5151cfa2c07b 100644 --- a/web/components/vote/votes.js +++ b/web/components/vote/votes.js @@ -101,6 +101,11 @@ class Vote { .addEventListener("click", function () { voteHandler.loadVotes(); }); + document + .getElementById(`votes-save`) + .addEventListener("click", function () { + voteHandler.saveVotes(); + }); } async refreshBreadCrumb() { @@ -156,7 +161,10 @@ class Vote { }); let candidateLists = await this.CandidateListModel.getCandidateLists(); candidateLists = candidateLists.filter((candidateList) => { - return candidateList.AreaID == voteHandler.AreaID; + return ( + candidateList.AreaID == voteHandler.AreaID && + candidateList.RoundID == voteHandler.RoundID + ); }); const markup = candidateLists @@ -195,4 +203,54 @@ class Vote { } }); } + + async saveVotes() { + let voteHandler = this; + let candidateLists = await this.CandidateListModel.getCandidateLists(); + candidateLists = candidateLists.filter((candidateList) => { + return ( + candidateList.AreaID == voteHandler.AreaID && + candidateList.RoundID == voteHandler.RoundID + ); + }); + + let votes = await this.VoteModel.getVotes(); + votes = votes.filter((vote) => { + return vote.DeskRoundID == voteHandler.DeskRoundID; + }); + + let method; + if (votes.length == 0) method = "POST"; + else method = "PUT"; + + candidateLists.forEach((candidateList) => { + voteHandler.VoteModel.saveVote( + method, + voteHandler.DeskRoundID, + candidateList.ID, + parseInt( + document.getElementById(candidateList.ID + "-vote-voice").value + ), + false, + false + ); + }); + + this.VoteModel.saveVote( + method, + this.DeskRoundID, + null, + parseInt(document.getElementById("blank-vote-voice").value), + true, + false + ); + this.VoteModel.saveVote( + method, + this.DeskRoundID, + null, + parseInt(document.getElementById("null-vote-voice").value), + false, + true + ); + } } diff --git a/web/services/model/vote-model.js b/web/services/model/vote-model.js index ff95c026a82c0a003e43c934b2cbc37bcce019f8..cffb3617aa52c85f884a0e27b822aa15aeec04af 100644 --- a/web/services/model/vote-model.js +++ b/web/services/model/vote-model.js @@ -46,7 +46,6 @@ class VoteModel { async saveVote( method, - ID, DeskRoundID, CandidateListID, VoiceNumber, @@ -54,13 +53,12 @@ class VoteModel { NullVote ) { try { - const response = await fetch("/api/Vote/" + ID, { + const response = await fetch("/api/Vote/", { method: method, headers: new Headers({ "XSRF-Token": this.current_user.xsrftoken, }), body: JSON.stringify({ - ID: ID, DeskRoundID: DeskRoundID, CandidateListID: CandidateListID, VoiceNumber: VoiceNumber,