We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Listagem de Parlamentares mostra último partido desfiliado ao invés de 'Sem Partido'
Se o parlamentar estiver desfiliado do último partido a listagem de parlamentares deve mostrar como "Sem Partido". Atualmente, a listagem de parlamentar mostra este partido como sendo o atual do parlamentar.


--- 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 
45 class ParlamentarCrud(Crud):
46     model = Parlamentar
47     help_path = ''
48 
49     class UpdateView(crud.base.CrudUpdateView):
50         form_class = ParlamentarForm
51 
52     class CreateView(crud.base.CrudCreateView):
53         form_class = ParlamentarCreateForm
54 
55         @property
56         def layout_key(self):
57             return 'ParlamentarCreate'
58 
59     class ListView(crud.base.CrudListView):
60         template_name = "parlamentares/parlamentares_list.html"
61         paginate_by = None
62 
63         def take_legislatura_id(self):
64             legislaturas = Legislatura.objects.all().order_by(
65                 '-data_inicio', '-data_fim')
66 
67             try:
68                 legislatura_id = int(self.request.GET['periodo'])
69             except MultiValueDictKeyError:
70                 legislatura_id = legislaturas.first().id
71 
72             return legislatura_id
73 
74         def get_queryset(self):
75             mandatos = Mandato.objects.filter(
76                 legislatura_id=self.take_legislatura_id())
77             return mandatos
78 
79         def get_rows(self, object_list):
80             parlamentares = []
81             for m in object_list:
82                 ultima_filiacao = m.parlamentar.filiacao_set.first()
83                 if ultima_filiacao:
84                     partido = ultima_filiacao.partido.sigla
85                 else:
86                     partido = _('Sem Registro')
87 
88                 parlamentar = [
89                     (m.parlamentar.nome_parlamentar, m.parlamentar.id),
90                     (partido, None),
91                     ('Sim' if m.parlamentar.ativo else 'Não', None)
92                 ]
93                 parlamentares.append(parlamentar)
94             return parlamentares
95 
96         def get_headers(self):
97             return ['Parlamentar', 'Partido', 'Ativo?']
98 
99         def get_context_data(self, **kwargs):
100             context = super(ParlamentarCrud.ListView, self
101                             ).get_context_data(**kwargs)
102             context.setdefault('title', self.verbose_name_plural)
103 
104             # Adiciona legislatura para filtrar parlamentares
105             legislaturas = Legislatura.objects.all().order_by(
106                 '-data_inicio', '-data_fim')
107             context['legislaturas'] = legislaturas
108             context['legislatura_id'] = self.take_legislatura_id()
109             return context
110 
111 
112 class MesaDiretoraView(FormView):
113     template_name = "mesa_diretora/mesa_diretora.html"
114     success_url = reverse_lazy('parlamentares:mesa_diretora')
115 
116     # Essa função avisa quando se pode compor uma Mesa Legislativa)
117     def validation(self, request):
118         mensagem = _("Não há nenhuma Sessão Legislativa cadastrada. \
119         Só é possível compor uma Mesa Diretora quando há uma Sessão \
120         Legislativa cadastrada.")
121         messages.add_message(request, messages.INFO, mensagem)
122 
123         return self.render_to_response(
124             {'legislaturas': Legislatura.objects.all(
125             ).order_by('-data_inicio'),
126                 'legislatura_selecionada': Legislatura.objects.last(),
127                 'cargos_vagos': CargoMesa.objects.all()})
128 
129     def get(self, request, *args, **kwargs):
130 
131         if (not Legislatura.objects.all() or
132                 not SessaoLegislativa.objects.all()):
133             return self.validation(request)
134 
135         mesa = SessaoLegislativa.objects.filter(
136             legislatura=Legislatura.objects.last()).first(
137         ).composicaomesa_set.all()
138 
139         cargos_ocupados = [m.cargo for m in mesa]
140         cargos = CargoMesa.objects.all()
141         cargos_vagos = list(set(cargos) - set(cargos_ocupados))
142 
143         parlamentares = Legislatura.objects.last().mandato_set.all()
144         parlamentares_ocupados = [m.parlamentar for m in mesa]
145         parlamentares_vagos = list(
146             set(
147                 [p.parlamentar for p in parlamentares]) - set(
148                 parlamentares_ocupados))
149 
150         return self.render_to_response(
151             {'legislaturas': Legislatura.objects.all(
152             ).order_by('-data_inicio'),
153                 'legislatura_selecionada': Legislatura.objects.last(),
154                 'sessoes': SessaoLegislativa.objects.filter(
155                 legislatura=Legislatura.objects.last()),
156                 'sessao_selecionada': SessaoLegislativa.objects.filter(
157                 legislatura=Legislatura.objects.last()).first(),
158                 'composicao_mesa': mesa,
159                 'parlamentares': parlamentares_vagos,
160                 'cargos_vagos': cargos_vagos
161             })
162 
163     def post(self, request, *args, **kwargs):
164         if 'Incluir' in request.POST:
165 
166             if (not Legislatura.objects.all() or
167                     not SessaoLegislativa.objects.all()):
168                 return self.validation(request)
169 
170             composicao = ComposicaoMesa()
171             composicao.sessao_legislativa = SessaoLegislativa.objects.get(
172                 id=int(request.POST['sessao']))
173             composicao.parlamentar = Parlamentar.objects.get(
174                 id=int(request.POST['parlamentar']))
175             composicao.cargo = CargoMesa.objects.get(
176                 id=int(request.POST['cargo']))
177             composicao.save()
178 
179             return redirect('parlamentares:mesa_diretora')
180 
181         elif 'Excluir' in request.POST:
182 
183             if (not Legislatura.objects.all() or
184                     not SessaoLegislativa.objects.all()):
185                 return self.validation(request)
186 
187             if 'composicao_mesa' in request.POST:
188                 ids = request.POST['composicao_mesa'].split(':')
189                 composicao = ComposicaoMesa.objects.get(
190                     sessao_legislativa_id=int(request.POST['sessao']),
191                     parlamentar_id=int(ids[0]),
192                     cargo_id=int(ids[1])
193                 )
194                 composicao.delete()
195             return redirect('parlamentares:mesa_diretora')
196         else:
197             mesa = ComposicaoMesa.objects.filter(
198                 sessao_legislativa=request.POST['sessao'])
199 
200             cargos_ocupados = [m.cargo for m in mesa]
201             cargos = CargoMesa.objects.all()
202             cargos_vagos = list(set(cargos) - set(cargos_ocupados))
203 
204             parlamentares = Legislatura.objects.get(
205                 id=int(request.POST['legislatura'])).mandato_set.all()
206             parlamentares_ocupados = [m.parlamentar for m in mesa]
207             parlamentares_vagos = list(
208                 set(
209                     [p.parlamentar for p in parlamentares]) - set(
210                     parlamentares_ocupados))
211             return self.render_to_response(
212                 {'legislaturas': Legislatura.objects.all(
213                 ).order_by('-data_inicio'),
214                     'legislatura_selecionada': Legislatura.objects.get(
215                     id=int(request.POST['legislatura'])),
216                     'sessoes': SessaoLegislativa.objects.filter(
217                     legislatura_id=int(request.POST['legislatura'])),
218                     'sessao_selecionada': SessaoLegislativa.objects.get(
219                     id=int(request.POST['sessao'])),
220                     'composicao_mesa': mesa,
221                     'parlamentares': parlamentares_vagos,
222                     'cargos_vagos': cargos_vagos
223                 })
224
```
--- 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
@@ -80,10 +80,10 @@
             parlamentares = []
             for m in object_list:
                 ultima_filiacao = m.parlamentar.filiacao_set.first()
-                if ultima_filiacao:
+                if ultima_filiacao and not ultima_filiacao.data_desfiliacao:
                     partido = ultima_filiacao.partido.sigla
                 else:
-                    partido = _('Sem Registro')
+                    partido = _('Sem Partido')
 
                 parlamentar = [
                     (m.parlamentar.nome_parlamentar, m.parlamentar.id),

{"golden_diff": "diff --git a/parlamentares/views.py b/parlamentares/views.py\n--- a/parlamentares/views.py\n+++ b/parlamentares/views.py\n@@ -80,10 +80,10 @@\n             parlamentares = []\n             for m in object_list:\n                 ultima_filiacao = m.parlamentar.filiacao_set.first()\n-                if ultima_filiacao:\n+                if ultima_filiacao and not ultima_filiacao.data_desfiliacao:\n                     partido = ultima_filiacao.partido.sigla\n                 else:\n-                    partido = _('Sem Registro')\n+                    partido = _('Sem Partido')\n \n                 parlamentar = [\n                     (m.parlamentar.nome_parlamentar, m.parlamentar.id),\n", "issue": "Listagem de Parlamentares mostra \u00faltimo partido desfiliado ao inv\u00e9s de 'Sem Partido'\nSe o parlamentar estiver desfiliado do \u00faltimo partido a listagem de parlamentares deve mostrar como \"Sem Partido\". Atualmente, a listagem de parlamentar mostra este partido como sendo o atual do parlamentar.\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\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.first()\n                if ultima_filiacao:\n                    partido = ultima_filiacao.partido.sigla\n                else:\n                    partido = _('Sem Registro')\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', '')\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\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.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"}]}