Exemplo n.º 1
0
    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(".")
Exemplo n.º 2
0
    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(".")
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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(".")
Exemplo n.º 5
0
    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(".")
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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(".")