1
1
# -*- coding: utf-8 -*-
2
-
3
- # Third Party Stuff
4
2
from django .contrib .auth .decorators import login_required
5
- from django .core .exceptions import PermissionDenied
6
3
from django .core .urlresolvers import reverse
7
4
from django .http import HttpResponseForbidden
8
5
from django .http .response import HttpResponse , HttpResponseRedirect
9
6
from django .shortcuts import get_object_or_404 , render
10
7
from django .views .decorators .http import require_http_methods
11
8
12
- # Junction Stuff
13
- from junction . base . constants import ConferenceSettingConstants , ProposalUserVoteRole
9
+ from junction . base . constants import ConferenceSettingConstants , \
10
+ ProposalUserVoteRole
14
11
from junction .conferences .models import Conference
15
12
16
13
from . import permissions
14
+ from . import utils
17
15
from .forms import ProposalReviewerVoteForm
18
- from .models import (
19
- Proposal ,
20
- ProposalComment ,
21
- ProposalCommentType ,
22
- ProposalCommentVote ,
23
- ProposalSectionReviewer ,
24
- ProposalSectionReviewerVote ,
25
- ProposalSectionReviewerVoteValue ,
26
- ProposalVote ,
27
- PSRVotePhase ,
28
- )
16
+ from .models import PSRVotePhase , Proposal , ProposalComment , \
17
+ ProposalCommentVote , ProposalSectionReviewer , ProposalSectionReviewerVote , \
18
+ ProposalSectionReviewerVoteValue , ProposalVote
29
19
30
20
31
21
@login_required
@@ -113,62 +103,30 @@ def proposal_comment_down_vote(request, conference_slug, proposal_slug,
113
103
114
104
@login_required
115
105
@require_http_methods (['GET' , 'POST' ])
116
- def proposal_reviewer_vote (request , conference_slug , proposal_slug , vote_phase = None ):
117
- if not vote_phase :
118
- vote_phase = PSRVotePhase .PRIMARY
119
- comment_type = ProposalCommentType .GENERAL
120
- elif vote_phase == PSRVotePhase .SECONDARY :
121
- print ('aaaaaaaaaaaaaaaaaaaaa' )
122
- comment_type = ProposalCommentType .SECONDARY_VOTING
123
-
106
+ def proposal_reviewer_vote (request , conference_slug , proposal_slug ):
107
+ user = request .user
108
+ vote_phase = PSRVotePhase .PRIMARY
124
109
conference = get_object_or_404 (Conference , slug = conference_slug )
125
110
proposal = get_object_or_404 (Proposal , slug = proposal_slug ,
126
111
conference = conference )
127
112
128
- if not (permissions .is_proposal_section_reviewer (request .user ,
129
- conference , proposal ) and
130
- permissions .is_proposal_voting_allowed (proposal )):
131
- raise PermissionDenied
132
-
133
- vote_value = None
134
-
135
- try :
136
- vote = ProposalSectionReviewerVote .objects .get (
137
- proposal = proposal ,
138
- voter = ProposalSectionReviewer .objects .get (
139
- conference_reviewer__reviewer = request .user ,
140
- conference_reviewer__conference = conference ,
141
- proposal_section = proposal .proposal_section ),
142
- phase = vote_phase ,
143
- )
144
- vote_value = vote .vote_value .vote_value
145
- except ProposalSectionReviewerVote .DoesNotExist :
146
- vote = None
147
-
148
- try :
149
- vote_comment = ProposalComment .objects .get (
150
- proposal = proposal ,
151
- commenter = request .user ,
152
- vote = True ,
153
- deleted = False ,
154
- comment_type = comment_type ,
155
- )
156
- except :
157
- vote_comment = None
113
+ psr_vote , p_comment = utils .get_reviewer_vote_info (user , conference , proposal , vote_phase )
114
+
158
115
if request .method == 'GET' :
159
- if vote_comment :
116
+ if psr_vote and p_comment :
160
117
proposal_vote_form = ProposalReviewerVoteForm (
161
- initial = {'vote_value' : vote_value ,
162
- 'comment' : vote_comment .comment },
163
- conference = conference )
118
+ conference = conference ,
119
+ initial = {
120
+ 'vote_value' : psr_vote .vote_value .vote_value ,
121
+ 'comment' : p_comment .comment
122
+ },
123
+ )
164
124
else :
165
- proposal_vote_form = ProposalReviewerVoteForm (
166
- initial = {'vote_value' : vote_value },
167
- conference = conference )
125
+ proposal_vote_form = ProposalReviewerVoteForm (conference = conference )
168
126
ctx = {
169
127
'proposal' : proposal ,
170
128
'form' : proposal_vote_form ,
171
- 'vote' : vote ,
129
+ 'vote' : psr_vote ,
172
130
}
173
131
174
132
return render (request , 'proposals/vote.html' , ctx )
@@ -184,36 +142,54 @@ def proposal_reviewer_vote(request, conference_slug, proposal_slug, vote_phase=N
184
142
# Valid Form
185
143
vote_value = form .cleaned_data ['vote_value' ]
186
144
comment = form .cleaned_data ['comment' ]
187
- if not vote :
188
- vote = ProposalSectionReviewerVote .objects .create (
189
- proposal = proposal ,
190
- voter = ProposalSectionReviewer .objects .filter (
191
- conference_reviewer__reviewer = request .user ,
192
- conference_reviewer__conference = conference ,
193
- proposal_section = proposal .proposal_section )[0 ],
194
- vote_value = ProposalSectionReviewerVoteValue .objects .filter (
195
- vote_value = vote_value )[0 ],
196
- phase = vote_phase ,
197
- )
198
- else :
199
- vote .vote_value = ProposalSectionReviewerVoteValue .objects .filter (
200
- vote_value = vote_value )[0 ]
201
- vote .save ()
202
- if not vote_comment :
203
- vote_comment = ProposalComment .objects .create (
204
- proposal = proposal ,
205
- commenter = request .user ,
206
- comment = comment ,
207
- vote = True ,
208
- comment_type = comment_type ,
209
- )
210
- else :
211
- vote_comment .comment = comment
212
- vote_comment .save ()
145
+ print (comment )
146
+ utils .update_reviewer_vote_info (user , psr_vote , vote_value , comment , vote_phase , proposal , conference )
213
147
return HttpResponseRedirect (reverse ('proposals-to-review' ,
214
148
args = [conference .slug ]))
215
149
216
150
151
+ @login_required
152
+ @require_http_methods (['GET' , 'POST' ])
217
153
def proposal_reviewer_secondary_vote (request , conference_slug , proposal_slug ):
218
154
vote_phase = PSRVotePhase .SECONDARY
219
- return proposal_reviewer_vote (request , conference_slug , proposal_slug , vote_phase = vote_phase )
155
+ user = request .user
156
+ conference = get_object_or_404 (Conference , slug = conference_slug )
157
+ proposal = get_object_or_404 (Proposal , slug = proposal_slug ,
158
+ conference = conference )
159
+
160
+ psr_vote , p_comment = utils .get_reviewer_vote_info (user , conference , proposal , vote_phase )
161
+
162
+ if request .method == 'GET' :
163
+ if psr_vote and p_comment :
164
+ proposal_vote_form = ProposalReviewerVoteForm (
165
+ conference = conference ,
166
+ initial = {
167
+ 'vote_value' : psr_vote .vote_value .vote_value ,
168
+ 'comment' : p_comment .comment
169
+ },
170
+ )
171
+ else :
172
+ proposal_vote_form = ProposalReviewerVoteForm (conference = conference )
173
+ ctx = {
174
+ 'proposal' : proposal ,
175
+ 'form' : proposal_vote_form ,
176
+ 'vote' : psr_vote ,
177
+ }
178
+
179
+ return render (request , 'proposals/vote.html' , ctx )
180
+
181
+ # POST Workflow
182
+ form = ProposalReviewerVoteForm (data = request .POST , conference = conference )
183
+ if not form .is_valid ():
184
+ ctx = {'form' : form ,
185
+ 'proposal' : proposal ,
186
+ 'form_errors' : form .errors }
187
+ return render (request , 'proposals/vote.html' , ctx )
188
+
189
+ # Valid Form
190
+ vote_value = form .cleaned_data ['vote_value' ]
191
+ comment = form .cleaned_data ['comment' ]
192
+ print (comment )
193
+ utils .update_reviewer_vote_info (user , psr_vote , vote_value , comment , vote_phase , proposal , conference )
194
+ return HttpResponseRedirect (reverse ('proposals-to-review' ,
195
+ args = [conference .slug ]))
0 commit comments