def bill_details_user_view(request, congress, type_slug, number): try: bill_type = BillType.by_slug(type_slug) except BillType.NotFound: raise Http404("Invalid bill type: " + type_slug) bill = get_object_or_404(Bill, congress=congress, bill_type=bill_type, number=number) ret = { } if request.user.is_staff: admin_panel = """ {% load humanize %} <div class="clear"> </div> <div style="margin-top: 1.5em; padding: .5em; background-color: #EEE; "> <b>ADMIN</b> - <a href="{% url "bill_go_to_summary_admin" %}?bill={{bill.id}}">Edit Summary</a> <br/>Tracked by {{feed.tracked_in_lists.count|intcomma}} users ({{feed.tracked_in_lists_with_email.count|intcomma}} w/ email). </div> """ from django.template import Template, Context, RequestContext, loader ret["admin_panel"] = Template(admin_panel).render(RequestContext(request, { 'bill': bill, "feed": Feed.BillFeed(bill), })) from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, Feed.BillFeed(bill))) return ret
def bill_details_user_view(request, congress, type_slug, number): bill = load_bill_from_url(congress, type_slug, number) ret = { } if request.user.is_staff: admin_panel = """ {% load humanize %} <div class="clear"> </div> <div style="margin-top: 1.5em; padding: .5em; background-color: #EEE; "> <b>ADMIN</b> - <a href="{% url "bill_go_to_summary_admin" %}?bill={{bill.id}}">Edit Summary</a> | <a href="/admin/bill/bill/{{bill.id}}">Edit</a> <br/>Tracked by {{feed.tracked_in_lists.count|intcomma}} users ({{feed.tracked_in_lists_with_email.count|intcomma}} w/ email). </div> """ from django.template import Template, Context ret["admin_panel"] = Template(admin_panel).render(Context({ 'bill': bill, "feed": bill.get_feed(), })) from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, bill.get_feed())) ret["reactions"] = get_user_bill_reactions(request, bill) ret["position"] = get_user_bill_position_info(request, bill) if request.user.is_authenticated: ret["stakeholders"] = [ { "id": s.id, "title": s.name } for s in request.user.stakeholder_set.all() ] return ret
def bill_details_user_view(request, congress, type_slug, number): bill = load_bill_from_url(congress, type_slug, number) ret = { } if request.user.is_staff: admin_panel = """ {% load humanize %} <div class="clear"> </div> <div style="margin-top: 1.5em; padding: .5em; background-color: #EEE; "> <b>ADMIN</b> - <a href="{% url "bill_go_to_summary_admin" %}?bill={{bill.id}}">Edit Summary</a> | <a href="/admin/bill/bill/{{bill.id}}">Edit</a> <br/>Tracked by {{feed.tracked_in_lists.count|intcomma}} users ({{feed.tracked_in_lists_with_email.count|intcomma}} w/ email). <br/>{{num_issuepos}} poll responses, {{num_calls}} phone calls to Congress. </div> """ from poll_and_call.models import RelatedBill as IssueByBill try: from poll_and_call.models import * ix = RelatedBill.objects.get(bill=bill).issue num_issuepos = UserPosition.objects.filter(position__issue=ix).count() num_calls = len([c for c in CallLog.objects.filter(position__position__issue=ix) if c.is_complete()]) except IssueByBill.DoesNotExist: num_issuepos = 0 num_calls = 0 from django.template import Template, Context, RequestContext, loader ret["admin_panel"] = Template(admin_panel).render(RequestContext(request, { 'bill': bill, "feed": bill.get_feed(), "num_issuepos": num_issuepos, "num_calls": num_calls, })) from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, bill.get_feed())) # poll_and_call if request.user.is_authenticated(): from poll_and_call.models import RelatedBill as IssueByBill, UserPosition try: issue = IssueByBill.objects.get(bill=bill).issue try: up = UserPosition.objects.get(user=request.user, position__issue=issue) targets = up.get_current_targets() ret["poll_and_call_position"] = { "id": up.position.id, "text": up.position.text, "can_change": up.can_change_position(), "can_call": [(t.id, t.person.name) for t in targets] if isinstance(targets, list) else [], "call_url": issue.get_absolute_url() + "/make_call", } except UserPosition.DoesNotExist: pass except IssueByBill.DoesNotExist: pass return ret
def committee_details_user_view(request, parent_code, child_code=None): committee = get_object_or_404(Committee, code=parent_code+(child_code if child_code else "")) ret = { } from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, committee.get_feed())) return ret
def bill_details_user_view(request, congress, type_slug, number): bill = load_bill_from_url(congress, type_slug, number) ret = { } if request.user.is_staff: admin_panel = """ {% load humanize %} <div class="clear"> </div> <div style="margin-top: 1.5em; padding: .5em; background-color: #EEE; "> <b>ADMIN</b> - <a href="{% url "bill_go_to_summary_admin" %}?bill={{bill.id}}">Edit Summary</a> <br/>Tracked by {{feed.tracked_in_lists.count|intcomma}} users ({{feed.tracked_in_lists_with_email.count|intcomma}} w/ email). </div> """ from django.template import Template, Context, RequestContext, loader ret["admin_panel"] = Template(admin_panel).render(RequestContext(request, { 'bill': bill, "feed": Feed.BillFeed(bill), })) from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, Feed.BillFeed(bill))) # poll_and_call if request.user.is_authenticated(): from poll_and_call.models import RelatedBill as IssueByBill, UserPosition try: issue = IssueByBill.objects.get(bill=bill).issue try: up = UserPosition.objects.get(user=request.user, position__issue=issue) ret["poll_and_call_position"] = { "id": up.position.id, "text": up.position.text, "can_change": up.can_change_position(), "can_call": up.can_make_call(), "call_url": issue.get_absolute_url() + "/make_call", } except UserPosition.DoesNotExist: pass except IssueByBill.DoesNotExist: pass return ret
def bill_details_user_view(request, congress, type_slug, number): bill = load_bill_from_url(congress, type_slug, number) ret = { } if request.user.is_staff: admin_panel = """ {% load humanize %} <div class="clear"> </div> <div style="margin-top: 1.5em; padding: .5em; background-color: #EEE; "> <b>ADMIN</b> - <a href="{% url "bill_go_to_summary_admin" %}?bill={{bill.id}}">Edit Summary</a> <br/>Tracked by {{feed.tracked_in_lists.count|intcomma}} users ({{feed.tracked_in_lists_with_email.count|intcomma}} w/ email). </div> """ from django.template import Template, Context, RequestContext, loader ret["admin_panel"] = Template(admin_panel).render(RequestContext(request, { 'bill': bill, "feed": Feed.BillFeed(bill), })) from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, Feed.BillFeed(bill))) return ret
def subject_user_view(request, sluggedname, termid): ix = get_object_or_404(BillTerm, id=termid) ret = { } from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, Feed.IssueFeed(ix))) return ret
def subject_user_view(request, sluggedname, termid): ix = get_object_or_404(BillTerm, id=termid) ret = { } from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, ix.get_feed())) return ret
def oversight_topic_details_user_view(request, id, slug): from person.views import render_subscribe_inline topic = get_object_or_404(OversightTopic, id=id) ret = { } ret.update(render_subscribe_inline(request, topic.get_feed())) return ret
def oversight_topic_list_user_view(request): from person.views import render_subscribe_inline ret = { } ret.update(render_subscribe_inline(request, OversightTopic.get_overview_feed())) return ret
def bill_details_user_view(request, congress, type_slug, number): bill = load_bill_from_url(congress, type_slug, number) ret = { } if request.user.is_staff: admin_panel = """ {% load humanize %} <div class="clear"> </div> <div style="margin-top: 1.5em; padding: .5em; background-color: #EEE; "> <b>ADMIN</b> - <a href="{% url "bill_go_to_summary_admin" %}?bill={{bill.id}}">Edit Summary</a> | <a href="/admin/bill/bill/{{bill.id}}">Edit</a> <br/>Tracked by {{feed.tracked_in_lists.count|intcomma}} users ({{feed.tracked_in_lists_with_email.count|intcomma}} w/ email). <br/>{{num_issuepos}} poll responses, {{num_calls}} phone calls to Congress. </div> """ from poll_and_call.models import RelatedBill as IssueByBill try: from poll_and_call.models import * ix = RelatedBill.objects.get(bill=bill).issue num_issuepos = UserPosition.objects.filter(position__issue=ix).count() num_calls = len([c for c in CallLog.objects.filter(position__position__issue=ix) if c.is_complete()]) except IssueByBill.DoesNotExist: num_issuepos = 0 num_calls = 0 from django.template import Template, Context, RequestContext, loader ret["admin_panel"] = Template(admin_panel).render(RequestContext(request, { 'bill': bill, "feed": bill.get_feed(), "num_issuepos": num_issuepos, "num_calls": num_calls, })) from person.views import render_subscribe_inline ret.update(render_subscribe_inline(request, bill.get_feed())) # poll_and_call if request.user.is_authenticated(): from poll_and_call.models import RelatedBill as IssueByBill, UserPosition try: issue = IssueByBill.objects.get(bill=bill).issue try: up = UserPosition.objects.get(user=request.user, position__issue=issue) targets = up.get_current_targets() ret["poll_and_call_position"] = { "id": up.position.id, "text": up.position.text, "can_change": up.can_change_position(), "can_call": [(t.id, t.person.name) for t in targets] if isinstance(targets, list) else [], "call_url": issue.get_absolute_url() + "/make_call", } except UserPosition.DoesNotExist: pass except IssueByBill.DoesNotExist: pass # emoji reactions import json from website.models import Reaction # get aggregate counts reaction_subject = "bill:" + bill.congressproject_id emoji_counts = { } for r in Reaction.objects.filter(subject=reaction_subject).values("reaction").annotate(count=Count('id')): v = json.loads(r["reaction"]) if isinstance(v, dict): for emoji in v.get("emojis", []): emoji_counts[emoji] = emoji_counts.get(emoji, 0) + r["count"] # get user's reactions r = Reaction.get_for_user(request).filter(subject=reaction_subject).first() my_emojis = set() if r and isinstance(r.reaction, dict): my_emojis = set(r.reaction.get("emojis", [])) ret["reactions"] = [ ] for emoji in Reaction.EMOJI_CHOICES: ret["reactions"].append({ "name": emoji, "count": emoji_counts.get(emoji, 0), "me": emoji in my_emojis, }) # stable sort by count so that zeroes are in our preferred order ret["reactions"] = sorted(ret["reactions"], key = lambda x : -x["count"]) return ret