diff --git a/etc/migracao/migra.py b/etc/migracao/migra.py index 47c085c..47216db 100755 --- a/etc/migracao/migra.py +++ b/etc/migracao/migra.py @@ -30,7 +30,6 @@ from sigi.apps.casas.models import * from sigi.apps.contatos.models import * from sigi.apps.convenios.models import * from sigi.apps.inventario.models import * -from sigi.apps.mesas.models import * from sigi.apps.parlamentares.models import * ERROR_MSG_0 = (' %s[%s]: erro desconhecido! Possível erro de integridade ' diff --git a/sigi/apps/casas/admin.py b/sigi/apps/casas/admin.py index 8a9c77a..f9571e3 100644 --- a/sigi/apps/casas/admin.py +++ b/sigi/apps/casas/admin.py @@ -14,9 +14,9 @@ from sigi.apps.contatos.models import Telefone from sigi.apps.convenios.models import Convenio from sigi.apps.diagnosticos.models import Diagnostico from sigi.apps.inventario.models import Bem -from sigi.apps.mesas.models import Legislatura from sigi.apps.metas.models import PlanoDiretor from sigi.apps.ocorrencias.models import Ocorrencia +from sigi.apps.parlamentares.models import Legislatura from sigi.apps.servicos.models import Servico from sigi.apps.utils import queryset_ascii from sigi.apps.utils.base_admin import BaseModelAdmin diff --git a/sigi/apps/casas/models.py b/sigi/apps/casas/models.py index 8d1d8b4..4bbd87d 100644 --- a/sigi/apps/casas/models.py +++ b/sigi/apps/casas/models.py @@ -124,7 +124,7 @@ class CasaLegislativa(models.Model): def total_parlamentares(self): """ Calcula o total de parlamentares atual da Casa: - - O total de parlamentares da mesas.legislatura mais recente, ou + - O total de parlamentares da legislatura mais recente, ou - num_parlamentares ou - 0 se não tiver nenhuma das informações """ diff --git a/sigi/apps/home/templatetags/menu_conf.yaml b/sigi/apps/home/templatetags/menu_conf.yaml index 2715269..1641f4f 100644 --- a/sigi/apps/home/templatetags/menu_conf.yaml +++ b/sigi/apps/home/templatetags/menu_conf.yaml @@ -18,14 +18,14 @@ main_menu: - title: Assembléias Legislativas url: casas/casalegislativa/?tipo__id__exact=2 - title: Legislaturas - url: mesas/legislatura/ + url: parlamentares/legislatura/ children: - title: Todas - url: mesas/legislatura/ + url: parlamentares/legislatura/ - title: Parlamentares url: parlamentares/parlamentar/ - title: Tabela de cargos - url: mesas/cargo/ + url: parlamentares/cargo/ - title: Tabela de partidos url: parlamentares/partido/ - title: Diagnósticos diff --git a/sigi/apps/mesas/__init__.py b/sigi/apps/mesas/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/sigi/apps/mesas/admin.py b/sigi/apps/mesas/admin.py deleted file mode 100644 index 8515923..0000000 --- a/sigi/apps/mesas/admin.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -from django.contrib import admin -from django.http import HttpResponse -from django.utils.html import escape -from django.utils.translation import ugettext as _ - -from sigi.apps.mesas.models import (Legislatura, Coligacao, ComposicaoColigacao, - SessaoLegislativa, MesaDiretora, Cargo, - MembroMesaDiretora) -from sigi.apps.parlamentares.models import Mandato -from sigi.apps.utils.base_admin import BaseModelAdmin - - -class MandatoInline(admin.TabularInline): - model = Mandato - raw_id_fields = ['parlamentar', ] - - -class LegislaturaAdmin(BaseModelAdmin): - date_hierarchy = 'data_inicio' - list_display = ('numero', 'casa_legislativa', 'uf', 'data_inicio', 'data_fim', 'data_eleicao', 'total_parlamentares') - raw_id_fields = ('casa_legislativa',) - list_display_links = ('numero',) - list_filter = ('casa_legislativa__municipio__uf', ) - search_fields = ('casa_legislativa__nome', 'casa_legislativa__municipio__nome') - inlines = (MandatoInline,) - - def uf(self, obj): - return obj.casa_legislativa.municipio.uf.sigla - uf.short_description = _(u'UF') - uf.admin_order_field = 'casa_legislativa__municipio__uf' - - def lookup_allowed(self, lookup, value): - return super(LegislaturaAdmin, self).lookup_allowed(lookup, value) or \ - lookup in ['casa_legislativa__municipio__uf__codigo_ibge__exact'] - - def response_change(self, request, obj): - response = super(LegislaturaAdmin, self).response_change(request, obj) - if "_popup" in request.POST: - response = HttpResponse('' % - # escape() calls force_unicode. - (escape(obj.pk), escapejs(obj))) - return response - - -class ColigacaoAdmin(BaseModelAdmin): - list_display = ('nome', 'legislatura', 'numero_votos') - list_display_links = ('nome',) - raw_id_fields = ('legislatura',) - search_fields = ('nome', 'legislatura__numero') - - -class ComposicaoColigacaoAdmin(BaseModelAdmin): - list_display = ('coligacao', 'partido') - list_display_links = ('coligacao', 'partido') - list_filter = ('partido',) - raw_id_fields = ('coligacao', 'partido') - search_fields = ('coligacao__nome', 'partido__nome', 'partido__sigla') - - -class SessaoLegislativaAdmin(BaseModelAdmin): - list_display = ('numero', 'mesa_diretora', 'legislatura', 'tipo', - 'data_inicio', 'data_fim') - list_display_links = ('numero',) - list_filter = ('tipo',) - fieldsets = ( - (None, { - 'fields': ('numero', 'mesa_diretora', 'legislatura', 'tipo') - }), - (None, { - 'fields': (('data_inicio', 'data_fim'), - ('data_inicio_intervalo', 'data_fim_intervalo')) - }), - ) - radio_fields = {'tipo': admin.VERTICAL} - raw_id_fields = ('mesa_diretora', 'legislatura') - search_fields = ('numero', 'mesa_diretora__casa_legislativa__nome') - - -class CargoAdmin(BaseModelAdmin): - list_display = ('descricao',) - search_fields = ('descricao',) - - -class MembroMesaDiretoraInline(admin.TabularInline): - model = MembroMesaDiretora - max_num = 11 - extra = 4 - raw_id_fields = ('parlamentar', 'cargo') - - -class MembroMesaDiretoraAdmin(BaseModelAdmin): - list_display = ('parlamentar', 'cargo', 'mesa_diretora') - list_display_links = ('parlamentar',) - list_filter = ('cargo',) - raw_id_fields = ('parlamentar', 'cargo', 'mesa_diretora') - search_fields = ('cargo__descricao', 'parlamentar__nome_completo', - 'parlamentar__nome_parlamentar', - 'mesa_diretora__casa_legislativa__nome') - - -class MesaDiretoraAdmin(BaseModelAdmin): - inlines = (MembroMesaDiretoraInline,) - raw_id_fields = ('casa_legislativa',) - list_display = ('id', 'casa_legislativa') - search_fields = ('casa_legislativa__nome',) - -admin.site.register(Legislatura, LegislaturaAdmin) -admin.site.register(Coligacao, ColigacaoAdmin) -admin.site.register(ComposicaoColigacao, ComposicaoColigacaoAdmin) -admin.site.register(SessaoLegislativa, SessaoLegislativaAdmin) -admin.site.register(MesaDiretora, MesaDiretoraAdmin) -admin.site.register(Cargo, CargoAdmin) -admin.site.register(MembroMesaDiretora, MembroMesaDiretoraAdmin) diff --git a/sigi/apps/mesas/models.py b/sigi/apps/mesas/models.py deleted file mode 100644 index 1143e1d..0000000 --- a/sigi/apps/mesas/models.py +++ /dev/null @@ -1,135 +0,0 @@ -# coding: utf-8 -from django.db import models -from django.utils.translation import ugettext as _ - -from sigi.apps.casas.models import CasaLegislativa - - -class Legislatura(models.Model): - casa_legislativa = models.ForeignKey(CasaLegislativa) - numero = models.PositiveSmallIntegerField(_(u'número legislatura')) - data_inicio = models.DateField(_(u'início')) - data_fim = models.DateField(_(u'fim')) - data_eleicao = models.DateField(_(u'data da eleição')) - total_parlamentares = models.PositiveIntegerField(_(u"Total de parlamentares")) - - casa_legislativa.convenio_uf_filter = True - casa_legislativa.convenio_cl_tipo_filter = True - - class Meta: - unique_together = (('casa_legislativa', 'numero')) - ordering = ['casa_legislativa__municipio__uf__sigla', '-data_inicio'] - - def __unicode__(self): - return _(u"%(number)sª legislatura da %(parliament)s (%(initial_year)s-%(final_year)s)") % dict( - number=self.numero, - parliament=self.casa_legislativa.__unicode__(), - initial_year=self.data_inicio.year, - final_year=self.data_fim.year) - - -class Coligacao(models.Model): - nome = models.CharField(max_length=50) - legislatura = models.ForeignKey(Legislatura) - numero_votos = models.PositiveIntegerField( - _(u'número de votos'), - blank=True, - null=True, - ) - - class Meta: - ordering = ('legislatura', 'nome') - verbose_name = _(u'coligação') - verbose_name_plural = _(u'coligações') - - def __unicode__(self): - return self.nome - - -class ComposicaoColigacao(models.Model): - coligacao = models.ForeignKey(Coligacao, verbose_name=_(u'coligação')) - partido = models.ForeignKey('parlamentares.Partido') - - class Meta: - verbose_name = _(u'composição da coligação') - verbose_name_plural = _(u'composições das coligações') - - def __unicode__(self): - return str(self.id) - - -class SessaoLegislativa(models.Model): - SESSAO_CHOICES = ( - ('O', _(u'Ordinária')), - ('E', _(u'Extraordinária')), - ) - numero = models.PositiveSmallIntegerField(_(u'número da sessão'), unique=True) - mesa_diretora = models.ForeignKey( - 'MesaDiretora', - verbose_name=_(u'Mesa Diretora') - ) - legislatura = models.ForeignKey(Legislatura) - tipo = models.CharField( - max_length=1, - choices=SESSAO_CHOICES, - default='O' - ) - data_inicio = models.DateField(_(u'início')) - data_fim = models.DateField(_(u'fim')) - data_inicio_intervalo = models.DateField( - _(u'início de intervalo'), - blank=True, - null=True - ) - data_fim_intervalo = models.DateField( - _(u'fim de intervalo'), - blank=True, - null=True - ) - - class Meta: - ordering = ('legislatura', 'numero') - verbose_name = _(u'Sessão Legislativa') - verbose_name_plural = _(u'Sessões Legislativas') - - def __unicode__(self): - return str(self.numero) - - -class MesaDiretora(models.Model): - casa_legislativa = models.ForeignKey( - 'casas.CasaLegislativa', - verbose_name=_(u'Casa Legislativa') - ) - - class Meta: - verbose_name = _(u'Mesa Diretora') - verbose_name_plural = _(u'Mesas Diretoras') - - def __unicode__(self): - return _(u'Mesa Diretora da %s') % unicode(self.casa_legislativa) - - -class Cargo(models.Model): - descricao = models.CharField(_(u'descrição'), max_length=30) - - class Meta: - ordering = ('descricao',) - - def __unicode__(self): - return self.descricao - - -class MembroMesaDiretora(models.Model): - parlamentar = models.ForeignKey('parlamentares.Parlamentar') - cargo = models.ForeignKey(Cargo) - mesa_diretora = models.ForeignKey(MesaDiretora) - - class Meta: - ordering = ('parlamentar',) - unique_together = ('cargo', 'mesa_diretora') - verbose_name = _(u'membro de Mesa Diretora') - verbose_name_plural = _(u'membros de Mesas Diretora') - - def __unicode__(self): - return '%s (%s)' % (unicode(self.parlamentar), unicode(self.cargo)) diff --git a/sigi/apps/parlamentares/admin.py b/sigi/apps/parlamentares/admin.py index f923756..80c8ebc 100644 --- a/sigi/apps/parlamentares/admin.py +++ b/sigi/apps/parlamentares/admin.py @@ -1,11 +1,14 @@ # -*- coding: utf-8 -*- from django.contrib import admin from django.contrib.contenttypes import generic -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, HttpResponse +from django.utils.html import escape, escapejs from django.utils.translation import ugettext as _ from sigi.apps.contatos.models import Telefone -from sigi.apps.parlamentares.models import Partido, Parlamentar, Mandato +from sigi.apps.parlamentares.models import ( + Partido, Parlamentar, Mandato, Legislatura, Coligacao, ComposicaoColigacao, + SessaoLegislativa, MesaDiretora, Cargo, MembroMesaDiretora) from sigi.apps.parlamentares.views import adicionar_parlamentar_carrinho from sigi.apps.utils.base_admin import BaseModelAdmin from sigi.apps.utils.filters import AlphabeticFilter @@ -83,6 +86,108 @@ class MandatoAdmin(BaseModelAdmin): # radio_fields = {'suplencia': admin.VERTICAL} +class MandatoInline(admin.TabularInline): + model = Mandato + raw_id_fields = ['parlamentar', ] + + +class LegislaturaAdmin(BaseModelAdmin): + date_hierarchy = 'data_inicio' + list_display = ('numero', 'casa_legislativa', 'uf', 'data_inicio', 'data_fim', 'data_eleicao', 'total_parlamentares') + raw_id_fields = ('casa_legislativa',) + list_display_links = ('numero',) + list_filter = ('casa_legislativa__municipio__uf', ) + search_fields = ('casa_legislativa__nome', 'casa_legislativa__municipio__nome') + inlines = (MandatoInline,) + + def uf(self, obj): + return obj.casa_legislativa.municipio.uf.sigla + uf.short_description = _(u'UF') + uf.admin_order_field = 'casa_legislativa__municipio__uf' + + def lookup_allowed(self, lookup, value): + return super(LegislaturaAdmin, self).lookup_allowed(lookup, value) or \ + lookup in ['casa_legislativa__municipio__uf__codigo_ibge__exact'] + + def response_change(self, request, obj): + response = super(LegislaturaAdmin, self).response_change(request, obj) + if "_popup" in request.POST: + response = HttpResponse('' % + # escape() calls force_unicode. + (escape(obj.pk), escapejs(obj))) + return response + + +class ColigacaoAdmin(BaseModelAdmin): + list_display = ('nome', 'legislatura', 'numero_votos') + list_display_links = ('nome',) + raw_id_fields = ('legislatura',) + search_fields = ('nome', 'legislatura__numero') + + +class ComposicaoColigacaoAdmin(BaseModelAdmin): + list_display = ('coligacao', 'partido') + list_display_links = ('coligacao', 'partido') + list_filter = ('partido',) + raw_id_fields = ('coligacao', 'partido') + search_fields = ('coligacao__nome', 'partido__nome', 'partido__sigla') + + +class SessaoLegislativaAdmin(BaseModelAdmin): + list_display = ('numero', 'mesa_diretora', 'legislatura', 'tipo', + 'data_inicio', 'data_fim') + list_display_links = ('numero',) + list_filter = ('tipo',) + fieldsets = ( + (None, { + 'fields': ('numero', 'mesa_diretora', 'legislatura', 'tipo') + }), + (None, { + 'fields': (('data_inicio', 'data_fim'), + ('data_inicio_intervalo', 'data_fim_intervalo')) + }), + ) + radio_fields = {'tipo': admin.VERTICAL} + raw_id_fields = ('mesa_diretora', 'legislatura') + search_fields = ('numero', 'mesa_diretora__casa_legislativa__nome') + + +class CargoAdmin(BaseModelAdmin): + list_display = ('descricao',) + search_fields = ('descricao',) + + +class MembroMesaDiretoraInline(admin.TabularInline): + model = MembroMesaDiretora + max_num = 11 + extra = 4 + raw_id_fields = ('parlamentar', 'cargo') + + +class MembroMesaDiretoraAdmin(BaseModelAdmin): + list_display = ('parlamentar', 'cargo', 'mesa_diretora') + list_display_links = ('parlamentar',) + list_filter = ('cargo',) + raw_id_fields = ('parlamentar', 'cargo', 'mesa_diretora') + search_fields = ('cargo__descricao', 'parlamentar__nome_completo', + 'parlamentar__nome_parlamentar', + 'mesa_diretora__casa_legislativa__nome') + + +class MesaDiretoraAdmin(BaseModelAdmin): + inlines = (MembroMesaDiretoraInline,) + raw_id_fields = ('casa_legislativa',) + list_display = ('id', 'casa_legislativa') + search_fields = ('casa_legislativa__nome',) + + admin.site.register(Partido, PartidoAdmin) admin.site.register(Parlamentar, ParlamentarAdmin) admin.site.register(Mandato, MandatoAdmin) +admin.site.register(Legislatura, LegislaturaAdmin) +admin.site.register(Coligacao, ColigacaoAdmin) +admin.site.register(ComposicaoColigacao, ComposicaoColigacaoAdmin) +admin.site.register(SessaoLegislativa, SessaoLegislativaAdmin) +admin.site.register(MesaDiretora, MesaDiretoraAdmin) +admin.site.register(Cargo, CargoAdmin) +admin.site.register(MembroMesaDiretora, MembroMesaDiretoraAdmin) diff --git a/sigi/apps/parlamentares/models.py b/sigi/apps/parlamentares/models.py index 5fb2be5..2d80d38 100644 --- a/sigi/apps/parlamentares/models.py +++ b/sigi/apps/parlamentares/models.py @@ -2,6 +2,8 @@ from django.db import models from django.utils.translation import ugettext as _ +from sigi.apps.casas.models import CasaLegislativa + class Partido(models.Model): nome = models.CharField(max_length=50) @@ -58,9 +60,9 @@ class Mandato(models.Model): ('S', _(u'Suplente')), ) parlamentar = models.ForeignKey(Parlamentar) - legislatura = models.ForeignKey('mesas.Legislatura') + legislatura = models.ForeignKey('parlamentares.Legislatura') partido = models.ForeignKey(Partido) - cargo = models.ForeignKey('mesas.Cargo') + cargo = models.ForeignKey('parlamentares.Cargo') inicio_mandato = models.DateField(_(u'início de mandato')) fim_mandato = models.DateField(_(u'fim de mandato')) is_afastado = models.BooleanField( @@ -77,3 +79,133 @@ class Mandato(models.Model): def __unicode__(self): return str(self.id) + + +class Legislatura(models.Model): + casa_legislativa = models.ForeignKey(CasaLegislativa) + numero = models.PositiveSmallIntegerField(_(u'número legislatura')) + data_inicio = models.DateField(_(u'início')) + data_fim = models.DateField(_(u'fim')) + data_eleicao = models.DateField(_(u'data da eleição')) + total_parlamentares = models.PositiveIntegerField(_(u"Total de parlamentares")) + + casa_legislativa.convenio_uf_filter = True + casa_legislativa.convenio_cl_tipo_filter = True + + class Meta: + unique_together = (('casa_legislativa', 'numero')) + ordering = ['casa_legislativa__municipio__uf__sigla', '-data_inicio'] + + def __unicode__(self): + return _(u"%(number)sª legislatura da %(parliament)s (%(initial_year)s-%(final_year)s)") % dict( + number=self.numero, + parliament=self.casa_legislativa.__unicode__(), + initial_year=self.data_inicio.year, + final_year=self.data_fim.year) + + +class Coligacao(models.Model): + nome = models.CharField(max_length=50) + legislatura = models.ForeignKey(Legislatura) + numero_votos = models.PositiveIntegerField( + _(u'número de votos'), + blank=True, + null=True, + ) + + class Meta: + ordering = ('legislatura', 'nome') + verbose_name = _(u'coligação') + verbose_name_plural = _(u'coligações') + + def __unicode__(self): + return self.nome + + +class ComposicaoColigacao(models.Model): + coligacao = models.ForeignKey(Coligacao, verbose_name=_(u'coligação')) + partido = models.ForeignKey('parlamentares.Partido') + + class Meta: + verbose_name = _(u'composição da coligação') + verbose_name_plural = _(u'composições das coligações') + + def __unicode__(self): + return str(self.id) + + +class SessaoLegislativa(models.Model): + SESSAO_CHOICES = ( + ('O', _(u'Ordinária')), + ('E', _(u'Extraordinária')), + ) + numero = models.PositiveSmallIntegerField(_(u'número da sessão'), unique=True) + mesa_diretora = models.ForeignKey( + 'MesaDiretora', + verbose_name=_(u'Mesa Diretora') + ) + legislatura = models.ForeignKey(Legislatura) + tipo = models.CharField( + max_length=1, + choices=SESSAO_CHOICES, + default='O' + ) + data_inicio = models.DateField(_(u'início')) + data_fim = models.DateField(_(u'fim')) + data_inicio_intervalo = models.DateField( + _(u'início de intervalo'), + blank=True, + null=True + ) + data_fim_intervalo = models.DateField( + _(u'fim de intervalo'), + blank=True, + null=True + ) + + class Meta: + ordering = ('legislatura', 'numero') + verbose_name = _(u'Sessão Legislativa') + verbose_name_plural = _(u'Sessões Legislativas') + + def __unicode__(self): + return str(self.numero) + + +class MesaDiretora(models.Model): + casa_legislativa = models.ForeignKey( + 'casas.CasaLegislativa', + verbose_name=_(u'Casa Legislativa') + ) + + class Meta: + verbose_name = _(u'Mesa Diretora') + verbose_name_plural = _(u'Mesas Diretoras') + + def __unicode__(self): + return _(u'Mesa Diretora da %s') % unicode(self.casa_legislativa) + + +class Cargo(models.Model): + descricao = models.CharField(_(u'descrição'), max_length=30) + + class Meta: + ordering = ('descricao',) + + def __unicode__(self): + return self.descricao + + +class MembroMesaDiretora(models.Model): + parlamentar = models.ForeignKey('parlamentares.Parlamentar') + cargo = models.ForeignKey(Cargo) + mesa_diretora = models.ForeignKey(MesaDiretora) + + class Meta: + ordering = ('parlamentar',) + unique_together = ('cargo', 'mesa_diretora') + verbose_name = _(u'membro de Mesa Diretora') + verbose_name_plural = _(u'membros de Mesa Diretora') + + def __unicode__(self): + return '%s (%s)' % (unicode(self.parlamentar), unicode(self.cargo)) diff --git a/sigi/settings/base.py b/sigi/settings/base.py index 94cc423..9204988 100644 --- a/sigi/settings/base.py +++ b/sigi/settings/base.py @@ -60,7 +60,6 @@ INSTALLED_APPS = ( 'sigi.apps.contatos', 'sigi.apps.servidores', 'sigi.apps.parlamentares', - 'sigi.apps.mesas', 'sigi.apps.casas', 'sigi.apps.convenios', 'sigi.apps.inventario',