Browse Source

Insere o campo Ano para compor a Numeracao das Audiencias Publicas (#3629)

feat: insere o campo Ano para compor a numeracao das audiencias publicas, tornando ao numero unico por Ano

Co-authored-by: joao <joao@mezzoplanejamento.com.br>
pull/3632/head
joaohortsenado 2 years ago
committed by GitHub
parent
commit
4e0590a693
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      sapl/audiencia/forms.py
  2. 27
      sapl/audiencia/migrations/0017_audienciapublica_ano.py
  3. 7
      sapl/audiencia/models.py
  4. 12
      sapl/audiencia/views.py
  5. 4
      sapl/templates/audiencia/layouts.yaml

7
sapl/audiencia/forms.py

@ -13,6 +13,7 @@ from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.utils import timezone, FileFieldCheckMixin, validar_arquivo from sapl.utils import timezone, FileFieldCheckMixin, validar_arquivo
class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
data_atual = timezone.now() data_atual = timezone.now()
@ -53,7 +54,7 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
class Meta: class Meta:
model = AudienciaPublica model = AudienciaPublica
fields = ['tipo', 'numero', 'nome', fields = ['tipo', 'numero', 'ano', 'nome',
'tema', 'data', 'hora_inicio', 'hora_fim', 'tema', 'data', 'hora_inicio', 'hora_fim',
'observacao', 'audiencia_cancelada', 'parlamentar_autor', 'requerimento', 'url_audio', 'observacao', 'audiencia_cancelada', 'parlamentar_autor', 'requerimento', 'url_audio',
'url_video', 'upload_pauta', 'upload_ata', 'url_video', 'upload_pauta', 'upload_ata',
@ -115,13 +116,13 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
raise ValidationError(msg) raise ValidationError(msg)
if not cleaned_data['numero']: if not cleaned_data['numero']:
ultima_audiencia = AudienciaPublica.objects.all().order_by('numero').last() ultima_audiencia = AudienciaPublica.objects.all().order_by('ano', 'numero').last()
if ultima_audiencia: if ultima_audiencia:
cleaned_data['numero'] = ultima_audiencia.numero + 1 cleaned_data['numero'] = ultima_audiencia.numero + 1
else: else:
cleaned_data['numero'] = 1 cleaned_data['numero'] = 1
else: else:
if AudienciaPublica.objects.filter(numero=cleaned_data['numero']).exclude(pk=self.instance.pk).exists(): if AudienciaPublica.objects.filter(numero=cleaned_data['numero'], ano=cleaned_data['ano']).exclude(pk=self.instance.pk).exists():
raise ValidationError(f"Já existe uma audiência com a numeração {cleaned_data['numero']}.") raise ValidationError(f"Já existe uma audiência com a numeração {cleaned_data['numero']}.")
if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']:

27
sapl/audiencia/migrations/0017_audienciapublica_ano.py

@ -0,0 +1,27 @@
# Generated by Django 2.2.28 on 2023-01-31 03:01
from django.db import migrations, models
def preencher_ano(apps, schema_editor):
AudienciaPublica = apps.get_model('audiencia', 'AudienciaPublica')
for audiencia in AudienciaPublica.objects.all():
audiencia.ano = audiencia.data.year
audiencia.save()
class Migration(migrations.Migration):
dependencies = [
('audiencia', '0016_auto_20201013_1126'),
]
operations = [
migrations.AddField(
model_name='audienciapublica',
name='ano',
field=models.PositiveSmallIntegerField(choices=[(2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=2000, verbose_name='Ano'),
preserve_default=False,
),
migrations.RunPython(preencher_ano),
]

7
sapl/audiencia/models.py

@ -5,7 +5,7 @@ from model_utils import Choices
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.parlamentares.models import (CargoMesa, Parlamentar) from sapl.parlamentares.models import (CargoMesa, Parlamentar)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericRelation,
restringe_tipos_de_arquivo_txt, texto_upload_path, restringe_tipos_de_arquivo_txt, texto_upload_path,
OverwriteStorage) OverwriteStorage)
@ -39,7 +39,6 @@ class TipoAudienciaPublica(models.Model):
tipo = models.CharField( tipo = models.CharField(
max_length=1, verbose_name=_('Tipo de Audiência Pública'), choices=TIPO_AUDIENCIA_CHOICES, default='A') max_length=1, verbose_name=_('Tipo de Audiência Pública'), choices=TIPO_AUDIENCIA_CHOICES, default='A')
class Meta: class Meta:
verbose_name = _('Tipo de Audiência Pública') verbose_name = _('Tipo de Audiência Pública')
verbose_name_plural = _('Tipos de Audiência Pública') verbose_name_plural = _('Tipos de Audiência Pública')
@ -62,6 +61,8 @@ class AudienciaPublica(models.Model):
blank=True, blank=True,
verbose_name=_('Tipo de Audiência Pública')) verbose_name=_('Tipo de Audiência Pública'))
numero = models.PositiveIntegerField(blank=True, verbose_name=_('Número')) numero = models.PositiveIntegerField(blank=True, verbose_name=_('Número'))
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'),
choices=RANGE_ANOS)
nome = models.CharField( nome = models.CharField(
max_length=100, verbose_name=_('Nome da Audiência Pública')) max_length=100, verbose_name=_('Nome da Audiência Pública'))
tema = models.CharField( tema = models.CharField(
@ -123,7 +124,7 @@ class AudienciaPublica(models.Model):
class Meta: class Meta:
verbose_name = _('Audiência Pública') verbose_name = _('Audiência Pública')
verbose_name_plural = _('Audiências Públicas') verbose_name_plural = _('Audiências Públicas')
ordering = ['nome', 'numero', 'tipo'] ordering = ['ano', 'numero', 'nome', 'tipo']
def __str__(self): def __str__(self):
return self.nome return self.nome

12
sapl/audiencia/views.py

@ -19,8 +19,8 @@ class AudienciaCrud(Crud):
public = [RP_LIST, RP_DETAIL, ] public = [RP_LIST, RP_DETAIL, ]
class BaseMixin(Crud.BaseMixin): class BaseMixin(Crud.BaseMixin):
list_field_names = [ 'nome', 'tipo', 'materia', 'data'] list_field_names = ['numero', 'nome', 'tipo', 'materia', 'data']
ordering = '-data', 'nome', 'numero', 'tipo' ordering = '-ano', '-numero', '-data', 'nome', 'tipo'
class ListView(Crud.ListView): class ListView(Crud.ListView):
paginate_by = 10 paginate_by = 10
@ -28,20 +28,20 @@ class AudienciaCrud(Crud):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
audiencia_materia = { str(a.id): (a.materia, a.numero) for a in context['object_list'] } audiencia_materia = {str(a.id): (a.materia, a.numero, a.ano) for a in context['object_list']}
for row in context['rows']: for row in context['rows']:
audiencia_id = row[0][1].split('/')[-1] audiencia_id = row[0][1].split('/')[-1]
tema = str(audiencia_materia[audiencia_id][1]) + ' - ' + row[0][0] tema = str(audiencia_materia[audiencia_id][1]) + '/' + str(audiencia_materia[audiencia_id][2])
row[0] = (tema, row[0][1]) row[0] = (tema, row[0][1])
coluna_materia = row[2] # Se mudar a ordem de listagem, mudar aqui. coluna_materia = row[3] # Se mudar a ordem de listagem, mudar aqui.
if coluna_materia[0]: if coluna_materia[0]:
materia = audiencia_materia[audiencia_id][0] materia = audiencia_materia[audiencia_id][0]
if materia is not None: if materia is not None:
url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id}) url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id})
else: else:
url_materia = None url_materia = None
row[2] = (coluna_materia[0], url_materia) # Se mudar a ordem de listagem, mudar aqui. row[3] = (coluna_materia[0], url_materia) # Se mudar a ordem de listagem, mudar aqui.
return context return context
class CreateView(Crud.CreateView): class CreateView(Crud.CreateView):

4
sapl/templates/audiencia/layouts.yaml

@ -1,7 +1,7 @@
{% load i18n %} {% load i18n %}
AudienciaPublica: AudienciaPublica:
{% trans 'Audiência Pública' %}: {% trans 'Audiência Pública' %}:
- nome:10 numero - nome:8 numero ano
- tema - tema
{% trans 'Dados' %}: {% trans 'Dados' %}:
- tipo_materia numero_materia ano_materia - tipo_materia numero_materia ano_materia
@ -14,7 +14,7 @@ AudienciaPublica:
AudienciaPublicaDetail: AudienciaPublicaDetail:
{% trans 'Audiência Pública' %}: {% trans 'Audiência Pública' %}:
- nome:10 numero - nome:10 numero ano
- tema - tema
{% trans 'Dados' %}: {% trans 'Dados' %}:
- materia tipo - materia tipo

Loading…
Cancel
Save