def post(self, request, **kwargs): object_id = kwargs['pk'] if not object_id: return HttpResponseBadRequest() bill = get_object_or_404(Bill, pk=object_id) user_input_type = request.POST.get('user_input_type') vote_types = ['approval vote','first vote','pre vote'] if user_input_type in vote_types: i = vote_types.index(user_input_type) vote = Vote.objects.get(pk=request.POST.get('vote_id')) if i == 0: bill.approval_vote = vote elif i == 1: bill.first_vote = vote elif i == 2: bill.pre_votes.add(vote) else: #FIXME: maybe different response. return HttpResponseRedirect(".") bill.update_stage() action.send(request.user, verb='added-vote-to-bill', description=vote, target=bill, timestamp=datetime.datetime.now()) elif user_input_type == 'budget_est': try: budget_est = BillBudgetEstimation.objects.get(bill=bill,estimator=request.user) except BillBudgetEstimation.DoesNotExist: budget_est = BillBudgetEstimation(bill=bill,estimator=request.user) #FIXME: breakage! sanitize! form = BudgetEstimateForm(bill,request.user,request.POST) if form.is_valid(): budget_est.one_time_gov = form.cleaned_data['be_one_time_gov'] budget_est.yearly_gov = form.cleaned_data['be_yearly_gov'] budget_est.one_time_ext = form.cleaned_data['be_one_time_ext'] budget_est.yearly_ext = form.cleaned_data['be_yearly_ext'] budget_est.summary = form.cleaned_data['be_summary'] budget_est.save() else: return self.get(request,budget_ests_form=form) #botg = request.POST.get('be_one_time_gov') #byg = request.POST.get('be_yearly_gov') #bote = request.POST.get('be_one_time_ext') #bye = request.POST.get('be_yearly_ext') #bs = request.POST.get('be_summary') #budget_est.one_time_gov = int(botg) if botg != "" else None #budget_est.yearly_gov = int(byg) if byg != "" else None #budget_est.one_time_ext = int(bote) if bote != "" else None #budget_est.yearly_ext = int(bye) if bye != "" else None #budget_est.summary = bs if bs != "" else None else: return HttpResponseBadRequest() return HttpResponseRedirect(".")
def post(self, request, **kwargs): object_id = kwargs['pk'] if not object_id: return HttpResponseBadRequest() bill = get_object_or_404(Bill, pk=object_id) user_input_type = request.POST.get('user_input_type') vote_types = ['approval vote', 'first vote', 'pre vote'] if user_input_type in vote_types: i = vote_types.index(user_input_type) vote = Vote.objects.get(pk=request.POST.get('vote_id')) if i == 0: bill.approval_vote = vote elif i == 1: bill.first_vote = vote elif i == 2: bill.pre_votes.add(vote) else: #FIXME: maybe different response. return HttpResponseRedirect(".") bill.update_stage() action.send(request.user, verb='added-vote-to-bill', description=vote, target=bill, timestamp=datetime.datetime.now()) elif user_input_type == 'budget_est': try: budget_est = BillBudgetEstimation.objects.get( bill=bill, estimator=request.user) except BillBudgetEstimation.DoesNotExist: budget_est = BillBudgetEstimation(bill=bill, estimator=request.user) #FIXME: breakage! sanitize! form = BudgetEstimateForm(bill, request.user, request.POST) if form.is_valid(): budget_est.one_time_gov = form.cleaned_data['be_one_time_gov'] budget_est.yearly_gov = form.cleaned_data['be_yearly_gov'] budget_est.one_time_ext = form.cleaned_data['be_one_time_ext'] budget_est.yearly_ext = form.cleaned_data['be_yearly_ext'] budget_est.summary = form.cleaned_data['be_summary'] budget_est.save() else: return self.get(request, budget_ests_form=form) #botg = request.POST.get('be_one_time_gov') #byg = request.POST.get('be_yearly_gov') #bote = request.POST.get('be_one_time_ext') #bye = request.POST.get('be_yearly_ext') #bs = request.POST.get('be_summary') #budget_est.one_time_gov = int(botg) if botg != "" else None #budget_est.yearly_gov = int(byg) if byg != "" else None #budget_est.one_time_ext = int(bote) if bote != "" else None #budget_est.yearly_ext = int(bye) if bye != "" else None #budget_est.summary = bs if bs != "" else None elif user_input_type == 'change_bill_name': if request.user.has_perm( 'laws.change_bill') and 'bill_name' in request.POST.keys(): new_title = request.POST.get('bill_name') new_popular_name = request.POST.get('popular_name') logger.info( 'user %d is updating bill %s. new_title=%s, new_popular_name=%s' % (request.user.id, object_id, new_title, new_popular_name)) Bill.objects.filter(pk=object_id).update( title=new_title, full_title=new_title, popular_name=new_popular_name) else: return HttpResponseForbidden() else: return HttpResponseBadRequest() return HttpResponseRedirect(".")
def get_context_data(self, *args, **kwargs): context = super(BillDetailView, self).get_context_data(*args, **kwargs) bill = context['object'] if bill.popular_name: context["keywords"] = bill.popular_name if self.request.user.is_authenticated(): userprofile = self.request.user.get_profile() context['watched'] = bill in userprofile.bills else: context['watched'] = False userprofile = None # compute data for user votes on this bill context['proposers'] = bill.proposers.select_related('current_party') votes = voting.models.Vote.objects.get_object_votes(bill) if 1 not in votes: votes[1] = 0 if -1 not in votes: votes[-1] = 0 count = votes[1] + votes[-1] score = { 'for': votes[1], 'against': votes[-1], 'total': votes[1] - votes[-1], 'count': count } (score['for_percent'], score['against_percent']) = votes_to_bar_widths( count, score['for'], score['against']) # Count only votes by users that are members of parties party_member_votes = voting.models.Vote.objects.get_for_object( bill).filter(user__profiles__party__isnull=False, is_archived=False) votes_for = party_member_votes.filter(direction=1).count() votes_against = party_member_votes.filter(direction=-1).count() count = votes_for + votes_against party_voting_score = { 'for': votes_for, 'against': votes_against, 'total': votes_for - votes_against, 'count': count } (party_voting_score['for_percent'], party_voting_score['against_percent']) = votes_to_bar_widths( count, party_voting_score['for'], party_voting_score['against']) # Count only votes by users that are members of the party of the viewing # user if userprofile and userprofile.party: user_party_member_votes = voting.models.Vote.objects.get_for_object( bill).filter(user__profiles__party=userprofile.party, is_archived=False) votes_for = user_party_member_votes.filter(direction=1).count() votes_against = user_party_member_votes.filter( direction=-1).count() count = votes_for + votes_against user_party_voting_score = { 'for': votes_for, 'against': votes_against, 'total': votes_for - votes_against, 'count': count } (user_party_voting_score['for_percent'], user_party_voting_score['against_percent']) = votes_to_bar_widths( count, user_party_voting_score['for'], user_party_voting_score['against']) else: user_party_voting_score = None context['voting_score'] = score context['party_voting_score'] = party_voting_score context['user_party_voting_score'] = user_party_voting_score context['tags'] = list(bill.tags) context['budget_ests'] = list(bill.budget_ests.all()) if self.request.user: context['user_has_be'] = bill.budget_ests.filter( estimator__username=str(self.request.user)).count() if 'budget_ests_form' in kwargs: context['budget_ests_form'] = kwargs['budget_ests_form'] else: context['budget_ests_form'] = BudgetEstimateForm( bill, self.request.user) return context
def post(self, request, **kwargs): object_id = kwargs['pk'] if not object_id: return HttpResponseBadRequest() bill = get_object_or_404(Bill, pk=object_id) user_input_type = request.POST.get('user_input_type') vote_types = ['approval vote', 'first vote', 'pre vote'] if user_input_type in vote_types: i = vote_types.index(user_input_type) vote = Vote.objects.get(pk=request.POST.get('vote_id')) if i == 0: bill.approval_vote = vote elif i == 1: bill.first_vote = vote elif i == 2: bill.pre_votes.add(vote) else: # FIXME: maybe different response. return HttpResponseRedirect(".") bill.update_stage() action.send(request.user, verb='added-vote-to-bill', description=vote, target=bill, timestamp=datetime.datetime.now()) elif user_input_type == 'budget_est': try: budget_est = BillBudgetEstimation.objects.get(bill=bill, estimator=request.user) except BillBudgetEstimation.DoesNotExist: budget_est = BillBudgetEstimation(bill=bill, estimator=request.user) # FIXME: breakage! sanitize! form = BudgetEstimateForm(bill, request.user, request.POST) if form.is_valid(): budget_est.one_time_gov = form.cleaned_data['be_one_time_gov'] budget_est.yearly_gov = form.cleaned_data['be_yearly_gov'] budget_est.one_time_ext = form.cleaned_data['be_one_time_ext'] budget_est.yearly_ext = form.cleaned_data['be_yearly_ext'] budget_est.summary = form.cleaned_data['be_summary'] budget_est.save() else: return self.get(request, budget_ests_form=form) # botg = request.POST.get('be_one_time_gov') # byg = request.POST.get('be_yearly_gov') # bote = request.POST.get('be_one_time_ext') # bye = request.POST.get('be_yearly_ext') # bs = request.POST.get('be_summary') # budget_est.one_time_gov = int(botg) if botg != "" else None # budget_est.yearly_gov = int(byg) if byg != "" else None # budget_est.one_time_ext = int(bote) if bote != "" else None # budget_est.yearly_ext = int(bye) if bye != "" else None # budget_est.summary = bs if bs != "" else None elif user_input_type == 'change_bill_name': if request.user.has_perm('laws.change_bill') and 'bill_name' in request.POST.keys(): new_title = request.POST.get('bill_name') new_popular_name = request.POST.get('popular_name') logger.info('user %d is updating bill %s. new_title=%s, new_popular_name=%s' % (request.user.id, object_id, new_title, new_popular_name)) Bill.objects.filter(pk=object_id).update(title=new_title, full_title=new_title, popular_name=new_popular_name) else: return HttpResponseForbidden() elif user_input_type == 'knesset_proposal': kp = KnessetProposal.objects.get(pk=request.POST.get('kp_id')) if not kp.bill: # kp already has a bill kp.bill = bill kp.save() else: return HttpResponseBadRequest() return HttpResponseRedirect(".")
def post(self, request, **kwargs): object_id = kwargs['pk'] if not object_id: return HttpResponseBadRequest() bill = get_object_or_404(Bill, pk=object_id) user_input_type = request.POST.get('user_input_type') vote_types = ['approval vote', 'first vote', 'pre vote'] if user_input_type in vote_types: i = vote_types.index(user_input_type) vote = Vote.objects.get(pk=request.POST.get('vote_id')) if i == 0: try: vote_bill_approved = vote.bill_approved except ObjectDoesNotExist: vote_bill_approved = None if vote_bill_approved and vote_bill_approved.pk != bill.pk: return self.render_post_error( request, bill, _('Vote already linked to another bill'), vote=vote, other_bill=vote_bill_approved) bill.approval_vote = vote elif i == 1: bill.first_vote = vote elif i == 2: bill.pre_votes.add(vote) else: return self.render_post_error(request, bill, _('Invalid vote type'), vote=vote) bill.update_stage() action.send(request.user, verb='added-vote-to-bill', description=vote, target=bill, timestamp=datetime.datetime.now()) elif user_input_type == 'budget_est': try: budget_est = BillBudgetEstimation.objects.get( bill=bill, estimator=request.user) except BillBudgetEstimation.DoesNotExist: budget_est = BillBudgetEstimation(bill=bill, estimator=request.user) # FIXME: breakage! sanitize! form = BudgetEstimateForm(bill, request.user, request.POST) if form.is_valid(): budget_est.one_time_gov = form.cleaned_data['be_one_time_gov'] budget_est.yearly_gov = form.cleaned_data['be_yearly_gov'] budget_est.one_time_ext = form.cleaned_data['be_one_time_ext'] budget_est.yearly_ext = form.cleaned_data['be_yearly_ext'] budget_est.summary = form.cleaned_data['be_summary'] budget_est.save() else: return self.get(request, budget_ests_form=form) # botg = request.POST.get('be_one_time_gov') # byg = request.POST.get('be_yearly_gov') # bote = request.POST.get('be_one_time_ext') # bye = request.POST.get('be_yearly_ext') # bs = request.POST.get('be_summary') # budget_est.one_time_gov = int(botg) if botg != "" else None # budget_est.yearly_gov = int(byg) if byg != "" else None # budget_est.one_time_ext = int(bote) if bote != "" else None # budget_est.yearly_ext = int(bye) if bye != "" else None # budget_est.summary = bs if bs != "" else None elif user_input_type == 'change_bill_name': if request.user.has_perm( 'laws.change_bill') and 'bill_name' in request.POST.keys(): new_title = request.POST.get('bill_name') new_popular_name = request.POST.get('popular_name') logger.info( 'user %d is updating bill %s. new_title=%s, new_popular_name=%s' % (request.user.id, object_id, new_title, new_popular_name)) Bill.objects.filter(pk=object_id).update( title=new_title, full_title=new_title, popular_name=new_popular_name) else: return HttpResponseForbidden() elif user_input_type == 'knesset_proposal': kp = KnessetProposal.objects.get(pk=request.POST.get('kp_id')) if kp.bill: return self.render_post_error( request, bill, _('The selected Knesset proposal is already linked to another bill' ), knesset_proposal=kp, other_bill=kp.bill) else: kp.bill = bill kp.save() elif user_input_type == 'committee_meetings': cm = CommitteeMeeting.objects.get(pk=request.POST.get('cm_id')) if request.POST.get('cm_stage') == "2": bill.second_committee_meetings.add(cm) else: bill.first_committee_meetings.add(cm) else: return HttpResponseBadRequest() return HttpResponseRedirect(".")
def get_context_data(self, *args, **kwargs): context = super(BillDetailView, self).get_context_data(*args, **kwargs) bill = context['object'] if bill.popular_name: context["keywords"] = bill.popular_name if self.request.user.is_authenticated(): userprofile = self.request.user.profiles.get() context['watched'] = bill in userprofile.bills else: context['watched'] = False userprofile = None # compute data for user votes on this bill current_knesset_id = Knesset.objects.current_knesset().number if bill.latest_private_proposal \ and bill.latest_private_proposal.knesset_id == current_knesset_id: proposers = bill.proposers.filter(is_current=True) extra_proposers = bill.proposers.filter(is_current=False) elif bill.latest_private_proposal: proposers = bill.latest_private_proposal.proposers.all() extra_proposers = bill.proposers.exclude( id__in=proposers.values_list('id', flat=True)) else: proposers = bill.proposers.all() extra_proposers = Member.objects.none() proposers = proposers.select_related('current_party') extra_proposers = extra_proposers.select_related('current_party') links = list(Link.objects.for_model(Member)) links_by_member = {} for k, g in itertools.groupby(links, lambda x: x.object_pk): links_by_member[str(k)] = list(g) for proposer in proposers: proposer.cached_links = links_by_member.get(str(proposer.pk), []) for proposer in extra_proposers: proposer.cached_links = links_by_member.get(str(proposer.pk), []) context['proposers'] = proposers context['extra_proposers'] = extra_proposers votes = voting.models.Vote.objects.get_object_votes(bill) if 1 not in votes: votes[1] = 0 if -1 not in votes: votes[-1] = 0 count = votes[1] + votes[-1] score = { 'for': votes[1], 'against': votes[-1], 'total': votes[1] - votes[-1], 'count': count } (score['for_percent'], score['against_percent']) = votes_to_bar_widths( count, score['for'], score['against']) # Count only votes by users that are members of parties party_member_votes = voting.models.Vote.objects.get_for_object( bill).filter(user__profiles__party__isnull=False, is_archived=False) votes_for = party_member_votes.filter(direction=1).count() votes_against = party_member_votes.filter(direction=-1).count() count = votes_for + votes_against party_voting_score = { 'for': votes_for, 'against': votes_against, 'total': votes_for - votes_against, 'count': count } (party_voting_score['for_percent'], party_voting_score['against_percent']) = votes_to_bar_widths( count, party_voting_score['for'], party_voting_score['against']) # Count only votes by users that are members of the party of the viewing # user if userprofile and userprofile.party: user_party_member_votes = voting.models.Vote.objects.get_for_object( bill).filter(user__profiles__party=userprofile.party, is_archived=False) votes_for = user_party_member_votes.filter(direction=1).count() votes_against = user_party_member_votes.filter( direction=-1).count() count = votes_for + votes_against user_party_voting_score = { 'for': votes_for, 'against': votes_against, 'total': votes_for - votes_against, 'count': count } (user_party_voting_score['for_percent'], user_party_voting_score['against_percent']) = votes_to_bar_widths( count, user_party_voting_score['for'], user_party_voting_score['against']) else: user_party_voting_score = None context['voting_score'] = score context['party_voting_score'] = party_voting_score context['user_party_voting_score'] = user_party_voting_score context['tags'] = list(bill.tags) context['budget_ests'] = list(bill.budget_ests.all()) if self.request.user: context['user_has_be'] = bill.budget_ests.filter( estimator__username=str(self.request.user)).count() if 'budget_ests_form' in kwargs: context['budget_ests_form'] = kwargs['budget_ests_form'] else: context['budget_ests_form'] = BudgetEstimateForm( bill, self.request.user) return context
def post(self, request, **kwargs): object_id = kwargs["pk"] if not object_id: return HttpResponseBadRequest() bill = get_object_or_404(Bill, pk=object_id) user_input_type = request.POST.get("user_input_type") vote_types = ["approval vote", "first vote", "pre vote"] if user_input_type in vote_types: i = vote_types.index(user_input_type) vote = Vote.objects.get(pk=request.POST.get("vote_id")) if i == 0: bill.approval_vote = vote elif i == 1: bill.first_vote = vote elif i == 2: bill.pre_votes.add(vote) else: # FIXME: maybe different response. return HttpResponseRedirect(".") bill.update_stage() action.send( request.user, verb="added-vote-to-bill", description=vote, target=bill, timestamp=datetime.datetime.now(), ) elif user_input_type == "budget_est": try: budget_est = BillBudgetEstimation.objects.get(bill=bill, estimator=request.user) except BillBudgetEstimation.DoesNotExist: budget_est = BillBudgetEstimation(bill=bill, estimator=request.user) # FIXME: breakage! sanitize! form = BudgetEstimateForm(bill, request.user, request.POST) if form.is_valid(): budget_est.one_time_gov = form.cleaned_data["be_one_time_gov"] budget_est.yearly_gov = form.cleaned_data["be_yearly_gov"] budget_est.one_time_ext = form.cleaned_data["be_one_time_ext"] budget_est.yearly_ext = form.cleaned_data["be_yearly_ext"] budget_est.summary = form.cleaned_data["be_summary"] budget_est.save() else: return self.get(request, budget_ests_form=form) # botg = request.POST.get('be_one_time_gov') # byg = request.POST.get('be_yearly_gov') # bote = request.POST.get('be_one_time_ext') # bye = request.POST.get('be_yearly_ext') # bs = request.POST.get('be_summary') # budget_est.one_time_gov = int(botg) if botg != "" else None # budget_est.yearly_gov = int(byg) if byg != "" else None # budget_est.one_time_ext = int(bote) if bote != "" else None # budget_est.yearly_ext = int(bye) if bye != "" else None # budget_est.summary = bs if bs != "" else None elif user_input_type == "change_bill_name": if request.user.has_perm("laws.change_bill") and "bill_name" in request.POST.keys(): new_title = request.POST.get("bill_name") new_popular_name = request.POST.get("popular_name") logger.info( "user %d is updating bill %s. new_title=%s, new_popular_name=%s" % (request.user.id, object_id, new_title, new_popular_name) ) Bill.objects.filter(pk=object_id).update( title=new_title, full_title=new_title, popular_name=new_popular_name ) else: return HttpResponseForbidden() else: return HttpResponseBadRequest() return HttpResponseRedirect(".")