-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvotes_controller.coffee
More file actions
65 lines (53 loc) · 2.54 KB
/
votes_controller.coffee
File metadata and controls
65 lines (53 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
mongoose = require("mongoose")
BaseController = require './base_controller'
User = require '../../models/user'
Vote = require '../../models/vote'
Competitor = require '../../models/competitor'
TeamHelpers = require '../../helpers/team_helpers'
class VotesController extends BaseController
new: (request, response) ->
TeamHelpers.getTeamsExceptUsers request.currentEvent, request.user, request.currentCompetitor, (err, teams) =>
return @error(request, response, err, '/') if err
response.render 'votes/new',
title: 'Vote for Teams'
teams: teams
currentRound: request.currentRound
create: (request, response) ->
error = (msg) => @error(request, response, msg, '/vote/new')
return error 'Not authorized' if request.body.vote.competitor and not request.user.is_admin
return error "Admin isn't setup to invest" if request.user.is_admin and not request.body.vote.competitor and not request.currentCompetitor
return error 'cannot invest - no currently open round' unless request.currentRound
return error 'cannot invest - round no longer open' unless request.currentRound.is_open
cid = if request.user.is_admin and request.body.vote.competitor then request.body.vote.competitor else request.currentCompetitor.id
Competitor.findById(cid).exec (err, competitor) ->
return error err if err
return "cannot invest - not setup as competitor" if !competitor
teams = request.body.vote.teams.split ","
#remove old votes
Vote.find(competitor: cid, round: request.currentRound.id).remove () ->
votes = []
processVote = (i, done) ->
return done() if i >= teams.length
team = teams[i].replace(/\"/g, "")
return processVote i+1, done if competitor.team and competitor.team.toString() is team
vote = new Vote
team: team
competitor: competitor.id
round: request.currentRound.id
event: request.currentEvent.id
vote.save (err, v) ->
throw err if err
votes.push v
processVote i+1, done
#console.log "here", i
processVote 0, () ->
if request.params.format is 'json'
response.contentType 'application/json'
response.send JSON.stringify(votes)
else
request.flash 'notice', 'voted successfully.'
if request.user.is_admin
response.redirect '/vote/new'
else
response.redirect '/competitor/dash'
module.exports = VotesController