Commit 58a2a1ee authored by Nicolas Joyard's avatar Nicolas Joyard

Implement dossier detail

parent 449891c8
......@@ -73,3 +73,26 @@ class ThemeBaseTest(BaseTest):
with self.assertNumQueries(self.queries):
self.client.get(self.url)
class DossierBaseTest(BaseTest):
tab = 'none'
base_url = '/votes/dossier/15407/%s/'
"""
Common queries plus:
- 1 for the dossier
- 1 for related themes
"""
queries = BaseTest.left_pane_queries + 2
@property
def url(self):
return self.base_url % self.tab
def do_query_test(self):
# First query to set session variables
self.client.get(self.url)
with self.assertNumQueries(self.queries):
self.client.get(self.url)
<h1 class="text-center">Pouvoirs publics : prorogation de l'état d'urgence</h1>
\ No newline at end of file
{
"status_code": 200
}
\ No newline at end of file
<span class="tag">Etat d'urgence</span>
\ No newline at end of file
{
"status_code": 200
}
\ No newline at end of file
<tr class="document">
<td>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-sen.png)"></span>
</td>
<td>
<a class="external" href="http://www.senat.fr/dossier-legislatif/pjl15-176.html" target="_blank">
Procedure file
</a>
</td>
<td>
<a class="external" href="http://www.senat.fr/dossier-legislatif/pjl15-176.html" target="_blank">
</a>
</td>
</tr>
---
<tr class="document">
<td>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-an.png)"></span>
</td>
<td>
<a class="external" href="http://www.assemblee-nationale.fr/14/dossiers/prorogation_loi_55-385.asp" target="_blank">
Procedure file
</a>
</td>
<td>
<a class="external" href="http://www.assemblee-nationale.fr/14/dossiers/prorogation_loi_55-385.asp" target="_blank">
</a>
</td>
</tr>
\ No newline at end of file
<tr class="proposal">
<td>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-an.png)" title="Assemblée nationale"></span>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-sen.png)" title="Sénat"></span>
</td>
<td>
<a href="/votes/dossier/15407/">
Pouvoirs publics : prorogation de l'état d'urgence
</a>
</td><td>14/prorogation_loi_55-385</td>
<td>
L'amendement n° 46 de m. estrosi à l'article 4 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence et renforçant l'efficacité de ses dispositions (première lecture).
<br/>
<small>
http://www2.assemblee-nationale.fr/scrutins/detail/(legislature)/14/(num)/1190
</small>
</td>
<td>Prorogation de l'État d'Urgence - amendement 46</td>
<td><i aria-label="against" class="fa fa-thumbs-down vote_negative" title="against"></i></td>
<td>rejected</td>
<td>128</td>
<td>198</td>
<td>0</td>
</tr>
---
<tr class="proposal">
<td>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-an.png)" title="Assemblée nationale"></span>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-sen.png)" title="Sénat"></span>
</td>
<td>
<a href="/votes/dossier/15407/">
Pouvoirs publics : prorogation de l'état d'urgence
</a>
</td><td>14/prorogation_loi_55-385</td>
<td>
L'ensemble du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence et renforçant l'efficacité de ses dispositions (première lecture).
<br/>
<small>
http://www2.assemblee-nationale.fr/scrutins/detail/(legislature)/14/(num)/1191
</small>
</td>
<td>Prorogation de l'état d'urgence - première lecture</td>
<td><i aria-label="against" class="fa fa-thumbs-down vote_negative" title="against"></i></td>
<td>adopted</td>
<td>550</td>
<td>6</td>
<td>1</td>
</tr>
\ No newline at end of file
......@@ -7,15 +7,15 @@
</tr>
---
<tr>
<th>L'amendement n° 108 (rect) de la commission et l'amendement identique n° 109 (rect) de m. jacob après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<th>La motion de renvoi en commission, déposée par m. christian jacob, du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'amendement n° 8 de m. larrivé et l'amendement identique n° 89 de m. jacob après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<th>L'amendement n° 32 de m. ciotti après l'article 2 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
......@@ -28,28 +28,28 @@
</tr>
---
<tr>
<th>L'amendement n° 7 de m. larrivé et l'amendement identique n° 88 de m. jacob après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<th>L'amendement n° 8 de m. larrivé et l'amendement identique n° 89 de m. jacob après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'amendement n° 30 de m. ciotti après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<th>L'amendement n° 108 (rect) de la commission et l'amendement identique n° 109 (rect) de m. jacob après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'amendement n° 52 de m. ciotti après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<th>L'ensemble du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'amendement n° 97 de m. jacob après l'article 2 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<th>L'amendement n° 83 de m. le fur après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
......@@ -63,28 +63,28 @@
</tr>
---
<tr>
<th>L'amendement n° 83 de m. le fur après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<th>L'amendement n° 97 de m. jacob après l'article 2 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'ensemble du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<th>L'amendement n° 52 de m. ciotti après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'amendement n° 32 de m. ciotti après l'article 2 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<th>L'amendement n° 30 de m. ciotti après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>La motion de renvoi en commission, déposée par m. christian jacob, du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<th>L'amendement n° 7 de m. larrivé et l'amendement identique n° 88 de m. jacob après l'article premier du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence (première lecture)</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
......@@ -114,15 +114,15 @@
</tr>
---
<tr>
<th>L'amendement n° 46 de m. estrosi à l'article 4 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence et renforçant l'efficacité de ses dispositions (première lecture).</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<th>L'ensemble du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence et renforçant l'efficacité de ses dispositions (première lecture).</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
---
<tr>
<th>L'ensemble du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence et renforçant l'efficacité de ses dispositions (première lecture).</th>
<td><span class="glyphicon glyphicon-ok text-danger"></span></td>
<th>L'amendement n° 46 de m. estrosi à l'article 4 du projet de loi prorogeant l'application de la loi n° 55-385 du 3 avril 1955 relative à l'état d'urgence et renforçant l'efficacité de ses dispositions (première lecture).</th>
<td><span class="glyphicon glyphicon-remove text-success"></span></td>
<td><span class="glyphicon glyphicon-remove"></span></td>
<td></td>
</tr>
\ No newline at end of file
......@@ -7,11 +7,11 @@
</td>
<td>
<a href="/votes/dossier/15407/">
Pouvoirs publics : prorogation de l'état d'urgence
<a href="/votes/dossier/15426/">
Pouvoirs publics : prorogation de l'application de la loi relative à l'état d'urgence
</a>
</td>
<td>14/prorogation_loi_55-385</td>
<td>14/application_loi_55-385_prorogation</td>
</tr>
---
<tr class="dossier">
......@@ -19,13 +19,15 @@
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-an.png)" title="Assemblée nationale"></span>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-sen.png)" title="Sénat"></span>
</td>
<td>
<a href="/votes/dossier/15409/">
Pouvoirs publics : prorogation de l'application de la loi sur l'état d'urgence
<a href="/votes/dossier/15424/">
Pouvoirs publics : application de la loi relative à l’état d’urgence
</a>
</td>
<td>14/loi_55-385_prorogation_application</td>
<td>14/prorogation_application_loi_55-385</td>
</tr>
---
<tr class="dossier">
......@@ -33,15 +35,13 @@
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-an.png)" title="Assemblée nationale"></span>
<span class="chamber-icon" style="background-image: url(/static/collected/images/chamber-sen.png)" title="Sénat"></span>
</td>
<td>
<a href="/votes/dossier/15424/">
Pouvoirs publics : application de la loi relative à l’état d’urgence
<a href="/votes/dossier/15409/">
Pouvoirs publics : prorogation de l'application de la loi sur l'état d'urgence
</a>
</td>
<td>14/prorogation_application_loi_55-385</td>
<td>14/loi_55-385_prorogation_application</td>
</tr>
---
<tr class="dossier">
......@@ -53,9 +53,9 @@
</td>
<td>
<a href="/votes/dossier/15426/">
Pouvoirs publics : prorogation de l'application de la loi relative à l'état d'urgence
<a href="/votes/dossier/15407/">
Pouvoirs publics : prorogation de l'état d'urgence
</a>
</td>
<td>14/application_loi_55-385_prorogation</td>
<td>14/prorogation_loi_55-385</td>
</tr>
\ No newline at end of file
from .base import DossierBaseTest
class DossierDetailTest(DossierBaseTest):
def test_queries(self):
self.do_query_test()
def test_name(self):
return self.selector_test('#dossier-detail h1')
def test_themes(self):
return self.selector_test('#dossier-detail .tag')
from .base import DossierBaseTest
class DossierDocumentsTest(DossierBaseTest):
tab = 'documents'
"""
Dossier base queries plus
- 1 for documents
- 1 for related chambers
"""
queries = DossierBaseTest.queries + 2
def test_queries(self):
self.do_query_test()
def test_proposals(self):
self.selector_test('.document')
from .base import DossierBaseTest
class DossierProposalsTest(DossierBaseTest):
tab = 'proposals'
"""
Dossier base queries plus
- 1 for proposals
- 1 for related recommendations
- 1 for related dossiers/documents
- 1 for related dossiers/documents/chambers
"""
queries = DossierBaseTest.queries + 4
def test_queries(self):
self.do_query_test()
def test_proposals(self):
self.selector_test('.proposal')
......@@ -4,7 +4,9 @@ from django.contrib import admin
from django.views import generic
from views.dossier_ac import DossierAutocomplete, ProposalAutocomplete
from views.dossier_detail import DossierDetail
from views.dossier_detail_base import DossierDetailBase
from views.dossier_detail_proposals import DossierDetailProposals
from views.dossier_detail_documents import DossierDetailDocuments
from views.dossier_list import DossierList
from views.group_ac import GroupAutocomplete
......@@ -20,7 +22,8 @@ from views.redirects import (
RedirectGroupList,
RedirectRepresentativeDetail,
RedirectThemeDetail,
RedirectGroupRepresentativeList
RedirectGroupRepresentativeList,
RedirectDossierDetail
)
from views.theme_detail_base import ThemeDetailBase
......@@ -110,9 +113,24 @@ urlpatterns = [
),
url(
r'^votes/dossier/(?P<pk>\d+)/$',
DossierDetail.as_view(),
RedirectDossierDetail.as_view(),
name='dossier-detail'
),
url(
r'^votes/dossier/(?P<pk>\d+)/none/$',
DossierDetailBase.as_view(),
name='dossier-none'
),
url(
r'^votes/dossier/(?P<pk>\d+)/proposals/$',
DossierDetailProposals.as_view(),
name='dossier-proposals'
),
url(
r'^votes/dossier/(?P<pk>\d+)/documents/$',
DossierDetailDocuments.as_view(),
name='dossier-documents'
),
url(
r'^votes/autocomplete/dossier/$',
DossierAutocomplete.as_view(),
......
......@@ -5,11 +5,7 @@ from django.views import generic
from representatives_votes.models import Dossier
class DossierDetail(generic.DetailView):
queryset = Dossier.objects.prefetch_related(
'proposals',
'proposals__recommendation',
'documents',
'documents__chamber',
)
class DossierDetailBase(generic.DetailView):
template_name = 'representatives_votes/dossier_detail.html'
queryset = Dossier.objects.prefetch_related('themes')
# coding: utf-8
from .dossier_detail_base import DossierDetailBase
class DossierDetailDocuments(DossierDetailBase):
template_name = 'representatives_votes/dossier_detail_documents.html'
def get_queryset(self):
qs = super(DossierDetailDocuments, self).get_queryset()
qs = qs.prefetch_related('documents__chamber')
return qs
def get_context_data(self, **kwargs):
c = super(DossierDetailDocuments, self).get_context_data(**kwargs)
c['tab'] = 'documents'
c['documents'] = c['object'].documents.all()
return c
# coding: utf-8
from .dossier_detail_base import DossierDetailBase
class DossierDetailProposals(DossierDetailBase):
template_name = 'representatives_votes/dossier_detail_proposals.html'
def get_queryset(self):
qs = super(DossierDetailProposals, self).get_queryset()
qs = qs.prefetch_related(
'proposals__recommendation',
'proposals__dossier__documents__chamber'
)
return qs
def get_context_data(self, **kwargs):
c = super(DossierDetailProposals, self).get_context_data(**kwargs)
c['tab'] = 'proposals'
c['proposals'] = c['object'].proposals.all()
return c
......@@ -38,3 +38,8 @@ class RedirectRepresentativeDetail(RedirectView):
class RedirectThemeDetail(RedirectView):
permanent = True
pattern_name = 'theme-links'
class RedirectDossierDetail(RedirectView):
permanent = True
pattern_name = 'dossier-proposals'
# coding: utf-8
from django.db import models
from representatives_votes.models import Dossier
from .theme_detail_base import ThemeDetailBase
......@@ -8,7 +12,13 @@ class ThemeDetailDossiers(ThemeDetailBase):
def get_queryset(self):
qs = super(ThemeDetailDossiers, self).get_queryset()
qs = qs.prefetch_related('dossiers__documents__chamber')
qs = qs.prefetch_related(
models.Prefetch(
'dossiers',
Dossier.objects.order_by('-pk')
.prefetch_related('documents__chamber')
)
)
return qs
def get_context_data(self, **kwargs):
......
......@@ -7,29 +7,16 @@
<table class="table table-responsive">
<tr>
<th>
{% trans "Chambers" %}
</th>
<th>
{% trans "Dossier" %}
</th>
<th>
{% trans "Reference" %}
<th>
{% trans "Proposal" %}
</th>
<th>
{% trans "Title" %}
</th>
<th>
{% trans "Recommendation" %}
</th>
<th>
{% trans "Status" %}
</th>
<th>{% trans "Chambers" %}</th>
<th>{% trans "Dossier" %}</th>
<th>{% trans "Reference" %}</th>
<th>{% trans "Proposal" %}</th>
<th>{% trans "Title" %}</th>
<th>{% trans "Recommendation" %}</th>
<th>{% trans "Status" %}</th>
<th>{{ "for"|position_icon }}</th>
<th>{{ "against"|position_icon }}</th>
<th>{{"abstain"|position_icon }}</th>
<th>{{ "abstain"|position_icon }}</th>
</tr>
{% for proposal in proposals %}
......
<p>No public position has been recorded. You can always <a>add a public position</a>.</p>
<table class="table table-responsive custom-timeline text-center">
<thead>
<tr>
<th class="text-center">Before</th>
<th class="text-center">Last year</th>
<th class="text-center">Last 6 months</th>
<th class="text-center">This month</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<button class="btn btn-default" type="button" data-toggle="collapse" data-target="#collapsePosition1" aria-expanded="false" aria-controls="collapsePosition1">
Jan Philipp ALBRECHT<br/>DD MMM YYYY
</button>
</td>
<td>
<button class="btn btn-default" type="button" data-toggle="collapse" data-target="#collapsePosition2" aria-expanded="false" aria-controls="collapsePosition2">
Martina ANDERSON<br/>DD MMM YYYY
</button>
<br>
<br>
<button class="btn btn-default" type="button" data-toggle="collapse" data-target="#collapsePosition3" aria-expanded="false" aria-controls="collapsePosition3">
Izaskun BILBAO BARANDICA<br/>DD MMM YYYY
</button>
</td>
<td></td>
<td>
<button class="btn btn-default" type="button" data-toggle="collapse" data-target="#collapsePosition4" aria-expanded="false" aria-controls="collapsePosition4">
Sergio Gaetano COFFERATI<br/>DD MMM YYYY
</button>
</td>
</tr>
</tbody>
</table>
<div class="collapse" id="collapsePosition1">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Jan Philipp ALBRECHT<br/>
<span class="small">DD MMM YYYY</span></h3>
</div>
<div class="panel-body text-justify">
<p>Un peu de contexte, lorem ipsum ...</p>
<p>Marfa bicycle rights Brooklyn, Odd Future kogi mustache farm-to-table seitan PBR irony. Whatever cardigan dreamcatcher deep v, iPhone McSweeney's Etsy selfies fingerstache yr fap blog normcore beard forage. Salvia Vice Blue Bottle raw denim, bespoke aesthetic DIY literally butcher readymade drinking vinegar meh chambray.</p> <p>Authentic Helvetica semiotics PBR&B beard. IPhone you probably haven't heard of them umami, deep v XOXO narwhal master cleanse 8-bit bespoke. Disrupt drinking vinegar health goth, Odd Future squid mumblecore cronut Kickstarter. Mustache actually occupy seitan deep v Etsy, polaroid messenger bag next level cornhole normcore.</p>
<blockquote>
<p>"Mr President, I would like to thank the Vice—President for his proposals. I think this is a very good step forward. It is not the first step, by the way, to creating the Digital Single Market, and I would like to bring our attention to the fact that, to create the Digital Single Market, we need to pass legislative acts. That is what we need to do, and therefore the Council – which I cannot see here – is an important partner to work with to create this Digital Single Market. What I can see at the moment is that, on the Telecoms Single Market, on the Network and Information Security Directive and on the Data Protection Regulation – all three of which are fundaments for building the next step of the digital single market – the Council is not coming along with general approaches, with positions, which are negotiable for us as a Parliament.</p>
<p>So I think that we need to insist first of all on the adoption of these legislative acts and then proceed with further measures. I think that you have made some good points, but there needs to be clear legislation, concrete formulations, about what you mean – for example – on platform neutrality and on geo-blocking; that is not enough, please try to improve the concreteness of these proposals."</p>
</blockquote>
<p class="text-right"><a class="btn btn-primary" href="http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-//EP//TEXT+CRE+20150519+ITEM-004+DOC+XML+V0//EN&language=en&query=INTERV&detail=2-090-000" target="blank">Check the source &raquo;</a></p>
</div>
</div>
</div>
{% load i18n %}
{% load representatives_votes_tags %}
{% load representatives_recommendations_tags %}
<div class="panel-group" id="accordion-proposals" role="tablist" aria-multiselectable="true">