We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
sapl 31: definir ordem de apresentação dos mandatos do parlamentar
Na função Parlamentar, definir a ordem de apresentação dos mandatos do parlamentar. Penso que a ordem decrescente é a adequada.
Exemplo: http://sapl31agudo.interlegis.leg.br/parlamentar/21/mandato


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `parlamentares/views.py`
Content:
```
1 from django.contrib import messages
2 from django.core.urlresolvers import reverse_lazy
3 from django.shortcuts import redirect
4 from django.utils.datastructures import MultiValueDictKeyError
5 from django.utils.translation import ugettext_lazy as _
6 from django.views.generic import FormView
7 
8 import crud.base
9 import crud.masterdetail
10 from crud.base import Crud
11 from crud.masterdetail import MasterDetailCrud
12 
13 from .forms import FiliacaoForm, ParlamentarCreateForm, ParlamentarForm
14 from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
15                      Filiacao, Legislatura, Mandato, NivelInstrucao,
16                      Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
17                      TipoAfastamento, TipoDependente)
18 
19 CargoMesaCrud = Crud.build(CargoMesa, 'cargo_mesa')
20 LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')
21 ColigacaoCrud = Crud.build(Coligacao, 'coligacao')
22 PartidoCrud = Crud.build(Partido, 'partidos')
23 SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')
24 TipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')
25 NivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao')
26 TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
27 TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
28 
29 DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')
30 MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')
31 
32 
33 class FiliacaoCrud(MasterDetailCrud):
34     model = Filiacao
35     parent_field = 'parlamentar'
36     help_path = ''
37 
38     class CreateView(MasterDetailCrud.CreateView):
39         form_class = FiliacaoForm
40 
41     class UpdateView(MasterDetailCrud.UpdateView):
42         form_class = FiliacaoForm
43 
44     class ListView(MasterDetailCrud.ListView):
45         ordering = '-data'
46 
47 
48 class ParlamentarCrud(Crud):
49     model = Parlamentar
50     help_path = ''
51 
52     class UpdateView(crud.base.CrudUpdateView):
53         form_class = ParlamentarForm
54 
55     class CreateView(crud.base.CrudCreateView):
56         form_class = ParlamentarCreateForm
57 
58         @property
59         def layout_key(self):
60             return 'ParlamentarCreate'
61 
62     class ListView(crud.base.CrudListView):
63         template_name = "parlamentares/parlamentares_list.html"
64         paginate_by = None
65 
66         def take_legislatura_id(self):
67             legislaturas = Legislatura.objects.all().order_by(
68                 '-data_inicio', '-data_fim')
69 
70             try:
71                 legislatura_id = int(self.request.GET['periodo'])
72             except MultiValueDictKeyError:
73                 legislatura_id = legislaturas.first().id
74 
75             return legislatura_id
76 
77         def get_queryset(self):
78             mandatos = Mandato.objects.filter(
79                 legislatura_id=self.take_legislatura_id())
80             return mandatos
81 
82         def get_rows(self, object_list):
83             parlamentares = []
84             for m in object_list:
85                 ultima_filiacao = m.parlamentar.filiacao_set.\
86                                     order_by('-data').first()
87                 if ultima_filiacao and not ultima_filiacao.data_desfiliacao:
88                     partido = ultima_filiacao.partido.sigla
89                 else:
90                     partido = _('Sem Partido')
91 
92                 parlamentar = [
93                     (m.parlamentar.nome_parlamentar, m.parlamentar.id),
94                     (partido, None),
95                     ('Sim' if m.parlamentar.ativo else 'Não', None)
96                 ]
97                 parlamentares.append(parlamentar)
98             return parlamentares
99 
100         def get_headers(self):
101             return ['Parlamentar', 'Partido', 'Ativo?']
102 
103         def get_context_data(self, **kwargs):
104             context = super(ParlamentarCrud.ListView, self
105                             ).get_context_data(**kwargs)
106             context.setdefault('title', self.verbose_name_plural)
107 
108             # Adiciona legislatura para filtrar parlamentares
109             legislaturas = Legislatura.objects.all().order_by(
110                 '-data_inicio', '-data_fim')
111             context['legislaturas'] = legislaturas
112             context['legislatura_id'] = self.take_legislatura_id()
113             return context
114 
115 
116 class MesaDiretoraView(FormView):
117     template_name = "mesa_diretora/mesa_diretora.html"
118     success_url = reverse_lazy('parlamentares:mesa_diretora')
119 
120     # Essa função avisa quando se pode compor uma Mesa Legislativa)
121     def validation(self, request):
122         mensagem = _("Não há nenhuma Sessão Legislativa cadastrada. \
123         Só é possível compor uma Mesa Diretora quando há uma Sessão \
124         Legislativa cadastrada.")
125         messages.add_message(request, messages.INFO, mensagem)
126 
127         return self.render_to_response(
128             {'legislaturas': Legislatura.objects.all(
129             ).order_by('-data_inicio'),
130                 'legislatura_selecionada': Legislatura.objects.last(),
131                 'cargos_vagos': CargoMesa.objects.all()})
132 
133     def get(self, request, *args, **kwargs):
134 
135         if (not Legislatura.objects.all() or
136                 not SessaoLegislativa.objects.all()):
137             return self.validation(request)
138 
139         mesa = SessaoLegislativa.objects.filter(
140             legislatura=Legislatura.objects.last()).first(
141         ).composicaomesa_set.all()
142 
143         cargos_ocupados = [m.cargo for m in mesa]
144         cargos = CargoMesa.objects.all()
145         cargos_vagos = list(set(cargos) - set(cargos_ocupados))
146 
147         parlamentares = Legislatura.objects.last().mandato_set.all()
148         parlamentares_ocupados = [m.parlamentar for m in mesa]
149         parlamentares_vagos = list(
150             set(
151                 [p.parlamentar for p in parlamentares]) - set(
152                 parlamentares_ocupados))
153 
154         return self.render_to_response(
155             {'legislaturas': Legislatura.objects.all(
156             ).order_by('-data_inicio'),
157                 'legislatura_selecionada': Legislatura.objects.last(),
158                 'sessoes': SessaoLegislativa.objects.filter(
159                 legislatura=Legislatura.objects.last()),
160                 'sessao_selecionada': SessaoLegislativa.objects.filter(
161                 legislatura=Legislatura.objects.last()).first(),
162                 'composicao_mesa': mesa,
163                 'parlamentares': parlamentares_vagos,
164                 'cargos_vagos': cargos_vagos
165             })
166 
167     def post(self, request, *args, **kwargs):
168         if 'Incluir' in request.POST:
169 
170             if (not Legislatura.objects.all() or
171                     not SessaoLegislativa.objects.all()):
172                 return self.validation(request)
173 
174             composicao = ComposicaoMesa()
175             composicao.sessao_legislativa = SessaoLegislativa.objects.get(
176                 id=int(request.POST['sessao']))
177             composicao.parlamentar = Parlamentar.objects.get(
178                 id=int(request.POST['parlamentar']))
179             composicao.cargo = CargoMesa.objects.get(
180                 id=int(request.POST['cargo']))
181             composicao.save()
182 
183             return redirect('parlamentares:mesa_diretora')
184 
185         elif 'Excluir' in request.POST:
186 
187             if (not Legislatura.objects.all() or
188                     not SessaoLegislativa.objects.all()):
189                 return self.validation(request)
190 
191             if 'composicao_mesa' in request.POST:
192                 ids = request.POST['composicao_mesa'].split(':')
193                 composicao = ComposicaoMesa.objects.get(
194                     sessao_legislativa_id=int(request.POST['sessao']),
195                     parlamentar_id=int(ids[0]),
196                     cargo_id=int(ids[1])
197                 )
198                 composicao.delete()
199             return redirect('parlamentares:mesa_diretora')
200         else:
201             mesa = ComposicaoMesa.objects.filter(
202                 sessao_legislativa=request.POST['sessao'])
203 
204             cargos_ocupados = [m.cargo for m in mesa]
205             cargos = CargoMesa.objects.all()
206             cargos_vagos = list(set(cargos) - set(cargos_ocupados))
207 
208             parlamentares = Legislatura.objects.get(
209                 id=int(request.POST['legislatura'])).mandato_set.all()
210             parlamentares_ocupados = [m.parlamentar for m in mesa]
211             parlamentares_vagos = list(
212                 set(
213                     [p.parlamentar for p in parlamentares]) - set(
214                     parlamentares_ocupados))
215             return self.render_to_response(
216                 {'legislaturas': Legislatura.objects.all(
217                 ).order_by('-data_inicio'),
218                     'legislatura_selecionada': Legislatura.objects.get(
219                     id=int(request.POST['legislatura'])),
220                     'sessoes': SessaoLegislativa.objects.filter(
221                     legislatura_id=int(request.POST['legislatura'])),
222                     'sessao_selecionada': SessaoLegislativa.objects.get(
223                     id=int(request.POST['sessao'])),
224                     'composicao_mesa': mesa,
225                     'parlamentares': parlamentares_vagos,
226                     'cargos_vagos': cargos_vagos
227                 })
228
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/parlamentares/views.py b/parlamentares/views.py
--- a/parlamentares/views.py
+++ b/parlamentares/views.py
@@ -27,8 +27,14 @@
 TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
 
 DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')
-MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')
 
+class MandatoCrud(MasterDetailCrud):
+    model = Mandato
+    parent_field = 'parlamentar'
+    help_path = ''
+
+    class ListView(MasterDetailCrud.ListView):
+        ordering = ('-data_fim_mandato')
 
 class FiliacaoCrud(MasterDetailCrud):
     model = Filiacao

{"golden_diff": "diff --git a/parlamentares/views.py b/parlamentares/views.py\n--- a/parlamentares/views.py\n+++ b/parlamentares/views.py\n@@ -27,8 +27,14 @@\n TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')\n \n DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')\n-MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')\n \n+class MandatoCrud(MasterDetailCrud):\n+    model = Mandato\n+    parent_field = 'parlamentar'\n+    help_path = ''\n+\n+    class ListView(MasterDetailCrud.ListView):\n+        ordering = ('-data_fim_mandato')\n \n class FiliacaoCrud(MasterDetailCrud):\n     model = Filiacao\n", "issue": "sapl 31: definir ordem de apresenta\u00e7\u00e3o dos mandatos do parlamentar\nNa fun\u00e7\u00e3o Parlamentar, definir a ordem de apresenta\u00e7\u00e3o dos mandatos do parlamentar. Penso que a ordem decrescente \u00e9 a adequada.\nExemplo: http://sapl31agudo.interlegis.leg.br/parlamentar/21/mandato\n\n", "before_files": [{"content": "from django.contrib import messages\nfrom django.core.urlresolvers import reverse_lazy\nfrom django.shortcuts import redirect\nfrom django.utils.datastructures import MultiValueDictKeyError\nfrom django.utils.translation import ugettext_lazy as _\nfrom django.views.generic import FormView\n\nimport crud.base\nimport crud.masterdetail\nfrom crud.base import Crud\nfrom crud.masterdetail import MasterDetailCrud\n\nfrom .forms import FiliacaoForm, ParlamentarCreateForm, ParlamentarForm\nfrom .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,\n                     Filiacao, Legislatura, Mandato, NivelInstrucao,\n                     Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,\n                     TipoAfastamento, TipoDependente)\n\nCargoMesaCrud = Crud.build(CargoMesa, 'cargo_mesa')\nLegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')\nColigacaoCrud = Crud.build(Coligacao, 'coligacao')\nPartidoCrud = Crud.build(Partido, 'partidos')\nSessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')\nTipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')\nNivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao')\nTipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')\nTipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')\n\nDependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')\nMandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')\n\n\nclass FiliacaoCrud(MasterDetailCrud):\n    model = Filiacao\n    parent_field = 'parlamentar'\n    help_path = ''\n\n    class CreateView(MasterDetailCrud.CreateView):\n        form_class = FiliacaoForm\n\n    class UpdateView(MasterDetailCrud.UpdateView):\n        form_class = FiliacaoForm\n\n    class ListView(MasterDetailCrud.ListView):\n        ordering = '-data'\n\n\nclass ParlamentarCrud(Crud):\n    model = Parlamentar\n    help_path = ''\n\n    class UpdateView(crud.base.CrudUpdateView):\n        form_class = ParlamentarForm\n\n    class CreateView(crud.base.CrudCreateView):\n        form_class = ParlamentarCreateForm\n\n        @property\n        def layout_key(self):\n            return 'ParlamentarCreate'\n\n    class ListView(crud.base.CrudListView):\n        template_name = \"parlamentares/parlamentares_list.html\"\n        paginate_by = None\n\n        def take_legislatura_id(self):\n            legislaturas = Legislatura.objects.all().order_by(\n                '-data_inicio', '-data_fim')\n\n            try:\n                legislatura_id = int(self.request.GET['periodo'])\n            except MultiValueDictKeyError:\n                legislatura_id = legislaturas.first().id\n\n            return legislatura_id\n\n        def get_queryset(self):\n            mandatos = Mandato.objects.filter(\n                legislatura_id=self.take_legislatura_id())\n            return mandatos\n\n        def get_rows(self, object_list):\n            parlamentares = []\n            for m in object_list:\n                ultima_filiacao = m.parlamentar.filiacao_set.\\\n                                    order_by('-data').first()\n                if ultima_filiacao and not ultima_filiacao.data_desfiliacao:\n                    partido = ultima_filiacao.partido.sigla\n                else:\n                    partido = _('Sem Partido')\n\n                parlamentar = [\n                    (m.parlamentar.nome_parlamentar, m.parlamentar.id),\n                    (partido, None),\n                    ('Sim' if m.parlamentar.ativo else 'N\u00e3o', None)\n                ]\n                parlamentares.append(parlamentar)\n            return parlamentares\n\n        def get_headers(self):\n            return ['Parlamentar', 'Partido', 'Ativo?']\n\n        def get_context_data(self, **kwargs):\n            context = super(ParlamentarCrud.ListView, self\n                            ).get_context_data(**kwargs)\n            context.setdefault('title', self.verbose_name_plural)\n\n            # Adiciona legislatura para filtrar parlamentares\n            legislaturas = Legislatura.objects.all().order_by(\n                '-data_inicio', '-data_fim')\n            context['legislaturas'] = legislaturas\n            context['legislatura_id'] = self.take_legislatura_id()\n            return context\n\n\nclass MesaDiretoraView(FormView):\n    template_name = \"mesa_diretora/mesa_diretora.html\"\n    success_url = reverse_lazy('parlamentares:mesa_diretora')\n\n    # Essa fun\u00e7\u00e3o avisa quando se pode compor uma Mesa Legislativa)\n    def validation(self, request):\n        mensagem = _(\"N\u00e3o h\u00e1 nenhuma Sess\u00e3o Legislativa cadastrada. \\\n        S\u00f3 \u00e9 poss\u00edvel compor uma Mesa Diretora quando h\u00e1 uma Sess\u00e3o \\\n        Legislativa cadastrada.\")\n        messages.add_message(request, messages.INFO, mensagem)\n\n        return self.render_to_response(\n            {'legislaturas': Legislatura.objects.all(\n            ).order_by('-data_inicio'),\n                'legislatura_selecionada': Legislatura.objects.last(),\n                'cargos_vagos': CargoMesa.objects.all()})\n\n    def get(self, request, *args, **kwargs):\n\n        if (not Legislatura.objects.all() or\n                not SessaoLegislativa.objects.all()):\n            return self.validation(request)\n\n        mesa = SessaoLegislativa.objects.filter(\n            legislatura=Legislatura.objects.last()).first(\n        ).composicaomesa_set.all()\n\n        cargos_ocupados = [m.cargo for m in mesa]\n        cargos = CargoMesa.objects.all()\n        cargos_vagos = list(set(cargos) - set(cargos_ocupados))\n\n        parlamentares = Legislatura.objects.last().mandato_set.all()\n        parlamentares_ocupados = [m.parlamentar for m in mesa]\n        parlamentares_vagos = list(\n            set(\n                [p.parlamentar for p in parlamentares]) - set(\n                parlamentares_ocupados))\n\n        return self.render_to_response(\n            {'legislaturas': Legislatura.objects.all(\n            ).order_by('-data_inicio'),\n                'legislatura_selecionada': Legislatura.objects.last(),\n                'sessoes': SessaoLegislativa.objects.filter(\n                legislatura=Legislatura.objects.last()),\n                'sessao_selecionada': SessaoLegislativa.objects.filter(\n                legislatura=Legislatura.objects.last()).first(),\n                'composicao_mesa': mesa,\n                'parlamentares': parlamentares_vagos,\n                'cargos_vagos': cargos_vagos\n            })\n\n    def post(self, request, *args, **kwargs):\n        if 'Incluir' in request.POST:\n\n            if (not Legislatura.objects.all() or\n                    not SessaoLegislativa.objects.all()):\n                return self.validation(request)\n\n            composicao = ComposicaoMesa()\n            composicao.sessao_legislativa = SessaoLegislativa.objects.get(\n                id=int(request.POST['sessao']))\n            composicao.parlamentar = Parlamentar.objects.get(\n                id=int(request.POST['parlamentar']))\n            composicao.cargo = CargoMesa.objects.get(\n                id=int(request.POST['cargo']))\n            composicao.save()\n\n            return redirect('parlamentares:mesa_diretora')\n\n        elif 'Excluir' in request.POST:\n\n            if (not Legislatura.objects.all() or\n                    not SessaoLegislativa.objects.all()):\n                return self.validation(request)\n\n            if 'composicao_mesa' in request.POST:\n                ids = request.POST['composicao_mesa'].split(':')\n                composicao = ComposicaoMesa.objects.get(\n                    sessao_legislativa_id=int(request.POST['sessao']),\n                    parlamentar_id=int(ids[0]),\n                    cargo_id=int(ids[1])\n                )\n                composicao.delete()\n            return redirect('parlamentares:mesa_diretora')\n        else:\n            mesa = ComposicaoMesa.objects.filter(\n                sessao_legislativa=request.POST['sessao'])\n\n            cargos_ocupados = [m.cargo for m in mesa]\n            cargos = CargoMesa.objects.all()\n            cargos_vagos = list(set(cargos) - set(cargos_ocupados))\n\n            parlamentares = Legislatura.objects.get(\n                id=int(request.POST['legislatura'])).mandato_set.all()\n            parlamentares_ocupados = [m.parlamentar for m in mesa]\n            parlamentares_vagos = list(\n                set(\n                    [p.parlamentar for p in parlamentares]) - set(\n                    parlamentares_ocupados))\n            return self.render_to_response(\n                {'legislaturas': Legislatura.objects.all(\n                ).order_by('-data_inicio'),\n                    'legislatura_selecionada': Legislatura.objects.get(\n                    id=int(request.POST['legislatura'])),\n                    'sessoes': SessaoLegislativa.objects.filter(\n                    legislatura_id=int(request.POST['legislatura'])),\n                    'sessao_selecionada': SessaoLegislativa.objects.get(\n                    id=int(request.POST['sessao'])),\n                    'composicao_mesa': mesa,\n                    'parlamentares': parlamentares_vagos,\n                    'cargos_vagos': cargos_vagos\n                })\n", "path": "parlamentares/views.py"}], "after_files": [{"content": "from django.contrib import messages\nfrom django.core.urlresolvers import reverse_lazy\nfrom django.shortcuts import redirect\nfrom django.utils.datastructures import MultiValueDictKeyError\nfrom django.utils.translation import ugettext_lazy as _\nfrom django.views.generic import FormView\n\nimport crud.base\nimport crud.masterdetail\nfrom crud.base import Crud\nfrom crud.masterdetail import MasterDetailCrud\n\nfrom .forms import FiliacaoForm, ParlamentarCreateForm, ParlamentarForm\nfrom .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,\n                     Filiacao, Legislatura, Mandato, NivelInstrucao,\n                     Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,\n                     TipoAfastamento, TipoDependente)\n\nCargoMesaCrud = Crud.build(CargoMesa, 'cargo_mesa')\nLegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')\nColigacaoCrud = Crud.build(Coligacao, 'coligacao')\nPartidoCrud = Crud.build(Partido, 'partidos')\nSessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')\nTipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')\nNivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao')\nTipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')\nTipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')\n\nDependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')\n\nclass MandatoCrud(MasterDetailCrud):\n    model = Mandato\n    parent_field = 'parlamentar'\n    help_path = ''\n\n    class ListView(MasterDetailCrud.ListView):\n        ordering = ('-data_fim_mandato')\n\nclass FiliacaoCrud(MasterDetailCrud):\n    model = Filiacao\n    parent_field = 'parlamentar'\n    help_path = ''\n\n    class CreateView(MasterDetailCrud.CreateView):\n        form_class = FiliacaoForm\n\n    class UpdateView(MasterDetailCrud.UpdateView):\n        form_class = FiliacaoForm\n\n    class ListView(MasterDetailCrud.ListView):\n        ordering = '-data'\n\n\nclass ParlamentarCrud(Crud):\n    model = Parlamentar\n    help_path = ''\n\n    class UpdateView(crud.base.CrudUpdateView):\n        form_class = ParlamentarForm\n\n    class CreateView(crud.base.CrudCreateView):\n        form_class = ParlamentarCreateForm\n\n        @property\n        def layout_key(self):\n            return 'ParlamentarCreate'\n\n    class ListView(crud.base.CrudListView):\n        template_name = \"parlamentares/parlamentares_list.html\"\n        paginate_by = None\n\n        def take_legislatura_id(self):\n            legislaturas = Legislatura.objects.all().order_by(\n                '-data_inicio', '-data_fim')\n\n            try:\n                legislatura_id = int(self.request.GET['periodo'])\n            except MultiValueDictKeyError:\n                legislatura_id = legislaturas.first().id\n\n            return legislatura_id\n\n        def get_queryset(self):\n            mandatos = Mandato.objects.filter(\n                legislatura_id=self.take_legislatura_id())\n            return mandatos\n\n        def get_rows(self, object_list):\n            parlamentares = []\n            for m in object_list:\n                ultima_filiacao = m.parlamentar.filiacao_set.\\\n                                    order_by('-data').first()\n                if ultima_filiacao and not ultima_filiacao.data_desfiliacao:\n                    partido = ultima_filiacao.partido.sigla\n                else:\n                    partido = _('Sem Partido')\n\n                parlamentar = [\n                    (m.parlamentar.nome_parlamentar, m.parlamentar.id),\n                    (partido, None),\n                    ('Sim' if m.parlamentar.ativo else 'N\u00e3o', None)\n                ]\n                parlamentares.append(parlamentar)\n            return parlamentares\n\n        def get_headers(self):\n            return ['Parlamentar', 'Partido', 'Ativo?']\n\n        def get_context_data(self, **kwargs):\n            context = super(ParlamentarCrud.ListView, self\n                            ).get_context_data(**kwargs)\n            context.setdefault('title', self.verbose_name_plural)\n\n            # Adiciona legislatura para filtrar parlamentares\n            legislaturas = Legislatura.objects.all().order_by(\n                '-data_inicio', '-data_fim')\n            context['legislaturas'] = legislaturas\n            context['legislatura_id'] = self.take_legislatura_id()\n            return context\n\n\nclass MesaDiretoraView(FormView):\n    template_name = \"mesa_diretora/mesa_diretora.html\"\n    success_url = reverse_lazy('parlamentares:mesa_diretora')\n\n    # Essa fun\u00e7\u00e3o avisa quando se pode compor uma Mesa Legislativa)\n    def validation(self, request):\n        mensagem = _(\"N\u00e3o h\u00e1 nenhuma Sess\u00e3o Legislativa cadastrada. \\\n        S\u00f3 \u00e9 poss\u00edvel compor uma Mesa Diretora quando h\u00e1 uma Sess\u00e3o \\\n        Legislativa cadastrada.\")\n        messages.add_message(request, messages.INFO, mensagem)\n\n        return self.render_to_response(\n            {'legislaturas': Legislatura.objects.all(\n            ).order_by('-data_inicio'),\n                'legislatura_selecionada': Legislatura.objects.last(),\n                'cargos_vagos': CargoMesa.objects.all()})\n\n    def get(self, request, *args, **kwargs):\n\n        if (not Legislatura.objects.all() or\n                not SessaoLegislativa.objects.all()):\n            return self.validation(request)\n\n        mesa = SessaoLegislativa.objects.filter(\n            legislatura=Legislatura.objects.last()).first(\n        ).composicaomesa_set.all()\n\n        cargos_ocupados = [m.cargo for m in mesa]\n        cargos = CargoMesa.objects.all()\n        cargos_vagos = list(set(cargos) - set(cargos_ocupados))\n\n        parlamentares = Legislatura.objects.last().mandato_set.all()\n        parlamentares_ocupados = [m.parlamentar for m in mesa]\n        parlamentares_vagos = list(\n            set(\n                [p.parlamentar for p in parlamentares]) - set(\n                parlamentares_ocupados))\n\n        return self.render_to_response(\n            {'legislaturas': Legislatura.objects.all(\n            ).order_by('-data_inicio'),\n                'legislatura_selecionada': Legislatura.objects.last(),\n                'sessoes': SessaoLegislativa.objects.filter(\n                legislatura=Legislatura.objects.last()),\n                'sessao_selecionada': SessaoLegislativa.objects.filter(\n                legislatura=Legislatura.objects.last()).first(),\n                'composicao_mesa': mesa,\n                'parlamentares': parlamentares_vagos,\n                'cargos_vagos': cargos_vagos\n            })\n\n    def post(self, request, *args, **kwargs):\n        if 'Incluir' in request.POST:\n\n            if (not Legislatura.objects.all() or\n                    not SessaoLegislativa.objects.all()):\n                return self.validation(request)\n\n            composicao = ComposicaoMesa()\n            composicao.sessao_legislativa = SessaoLegislativa.objects.get(\n                id=int(request.POST['sessao']))\n            composicao.parlamentar = Parlamentar.objects.get(\n                id=int(request.POST['parlamentar']))\n            composicao.cargo = CargoMesa.objects.get(\n                id=int(request.POST['cargo']))\n            composicao.save()\n\n            return redirect('parlamentares:mesa_diretora')\n\n        elif 'Excluir' in request.POST:\n\n            if (not Legislatura.objects.all() or\n                    not SessaoLegislativa.objects.all()):\n                return self.validation(request)\n\n            if 'composicao_mesa' in request.POST:\n                ids = request.POST['composicao_mesa'].split(':')\n                composicao = ComposicaoMesa.objects.get(\n                    sessao_legislativa_id=int(request.POST['sessao']),\n                    parlamentar_id=int(ids[0]),\n                    cargo_id=int(ids[1])\n                )\n                composicao.delete()\n            return redirect('parlamentares:mesa_diretora')\n        else:\n            mesa = ComposicaoMesa.objects.filter(\n                sessao_legislativa=request.POST['sessao'])\n\n            cargos_ocupados = [m.cargo for m in mesa]\n            cargos = CargoMesa.objects.all()\n            cargos_vagos = list(set(cargos) - set(cargos_ocupados))\n\n            parlamentares = Legislatura.objects.get(\n                id=int(request.POST['legislatura'])).mandato_set.all()\n            parlamentares_ocupados = [m.parlamentar for m in mesa]\n            parlamentares_vagos = list(\n                set(\n                    [p.parlamentar for p in parlamentares]) - set(\n                    parlamentares_ocupados))\n            return self.render_to_response(\n                {'legislaturas': Legislatura.objects.all(\n                ).order_by('-data_inicio'),\n                    'legislatura_selecionada': Legislatura.objects.get(\n                    id=int(request.POST['legislatura'])),\n                    'sessoes': SessaoLegislativa.objects.filter(\n                    legislatura_id=int(request.POST['legislatura'])),\n                    'sessao_selecionada': SessaoLegislativa.objects.get(\n                    id=int(request.POST['sessao'])),\n                    'composicao_mesa': mesa,\n                    'parlamentares': parlamentares_vagos,\n                    'cargos_vagos': cargos_vagos\n                })\n", "path": "parlamentares/views.py"}]}