internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: interlegis/sapl

Issue:
Auto-numeração de Norma Jurídica
Retirado do tíquete nº 132457
"Bom dia,
Achei muito útil a funcionalidade de numeração automática das normas jurídicas no SAPL 3.1
Outra novidade que gostei muito é a aceitação de leis com letra no final, do tipo "lei 2133A"
Porém, quando insiro alguma lei com letra, a auto-numeração das leis seguintes deixa de funcionar. 
Peço então que, por gentileza, revisem esse problema. 
Atenciosamente,
Marcos F. Scher."


Discussion:

Resolving patch:
diff --git a/sapl/norma/views.py b/sapl/norma/views.py
--- a/sapl/norma/views.py
+++ b/sapl/norma/views.py
@@ -1,4 +1,5 @@
 
+import re
 import weasyprint
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.core.exceptions import ObjectDoesNotExist
@@ -201,14 +202,12 @@ def recuperar_norma(request):
 def recuperar_numero_norma(request):
     tipo = TipoNormaJuridica.objects.get(pk=request.GET['tipo'])
     ano = request.GET.get('ano', '')
-
     param = {'tipo': tipo}
     param['ano'] = ano if ano else timezone.now().year
-    norma = NormaJuridica.objects.filter(**param).extra(
-            {'numero_id': "CAST(numero as INTEGER)"}).order_by(
-            'tipo', 'ano','numero_id').values_list('numero', 'ano').last()
+    norma = NormaJuridica.objects.filter(**param).order_by(
+            'tipo', 'ano').values_list('numero', 'ano').last()
     if norma:
-        response = JsonResponse({'numero': int(norma[0]) + 1,
+        response = JsonResponse({'numero': int(re.sub("[^0-9].*", '', norma[0])) + 1,
                                  'ano': norma[1]})
     else:
         response = JsonResponse(


Test patch:
Repository: interlegis/sapl

Issue:
Audiências Públicas sem possibilidade de Edição
Ao criar uma Audiência Pública e salva-la, não aparecem os metadados da matéria legislativa inseridas no preenchimento. 
Ao clicar em Editar, só  aparece o título da audiência criada.
grato


Discussion:

Resolving patch:
diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py
--- a/sapl/audiencia/forms.py
+++ b/sapl/audiencia/forms.py
@@ -77,9 +77,11 @@ def clean(self):
                     msg = _('A hora de fim não pode ser anterior a hora de ínicio')
                     raise ValidationError(msg)
 
-        return self.cleaned_data
+        return cleaned_data
 
     @transaction.atomic()
     def save(self, commit=True):
-        audiencia = super(AudienciaForm, self).save(commit)
+        audiencia = super(AudienciaForm, self).save(False)
+        audiencia.materia = self.cleaned_data['materia']
+        audiencia.save()
         return audiencia
\ No newline at end of file


Test patch:
Repository: interlegis/sapl

Issue:
Tamanho do campo do nome de Comissão limitado à 50 caractereres
Atenção na migração do 2.5 para 3.1 com nomes de Comissão acima de 50 caracteres. Ao tentar editá-los no 3.1, poderá ocorrer Error 500. 


Discussion:
Nos forneça um exemplo de casa onde ocorra isso.
![image](https://user-images.githubusercontent.com/30807716/43535451-73952454-9590-11e8-9429-d97aae8bb535.png)

Teste feito no sapl.teste.df.leg.br

Resolving patch:
diff --git a/sapl/base/migrations/0018_auto_20180801_1652.py b/sapl/base/migrations/0018_auto_20180801_1652.py
new file mode 100644
--- /dev/null
+++ b/sapl/base/migrations/0018_auto_20180801_1652.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2018-08-01 19:52
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('base', '0017_appconfig_cronometro_consideracoes'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='autor',
+            name='nome',
+            field=models.CharField(blank=True, max_length=120, verbose_name='Nome do Autor'),
+        ),
+    ]
diff --git a/sapl/base/models.py b/sapl/base/models.py
--- a/sapl/base/models.py
+++ b/sapl/base/models.py
@@ -188,7 +188,7 @@ class Autor(models.Model):
     autor_related = GenericForeignKey('content_type', 'object_id')
 
     nome = models.CharField(
-        max_length=60, blank=True, verbose_name=_('Nome do Autor'))
+        max_length=120, blank=True, verbose_name=_('Nome do Autor'))
 
     cargo = models.CharField(max_length=50, blank=True)
 
diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py
--- a/sapl/comissoes/forms.py
+++ b/sapl/comissoes/forms.py
@@ -242,7 +242,7 @@ def clean(self):
         if not self.is_valid():
             return self.cleaned_data
 
-        if len(self.cleaned_data['nome']) > 50:
+        if len(self.cleaned_data['nome']) > 100:
             msg = _('Nome da Comissão deve ter no máximo 50 caracteres.')
             raise ValidationError(msg)
         if self.cleaned_data['data_extincao']:


Test patch:
Repository: interlegis/sapl

Issue:
Relatório Normas Jurídicas: segundo critério de ordem
O relatório de normas jurídicas tem, por primeiro critério de ordem, a data por ordem decrescente. O segundo critério é o Número, em ordem crescente, que deveria mudar para decrescente.
https://sapl.agudo.rs.leg.br/norma/pesquisar?tipo=12&numero=&ano=2018&data_0=&data_1=&data_publicacao_0=&data_publicacao_1=&ementa=&assuntos=
![captura de tela de 2018-08-02 08-30-28](https://user-images.githubusercontent.com/19169882/43581175-6fa4b8ca-962e-11e8-8ff0-5281b41c1888.png)



Discussion:
O @DtiLegBG fez um commit ano passado que transformou o `numero` de Norma Jurídica em alfanumérico: #879 (para casos como 19-A, 20-B, etc). Assim sendo, a ordenação estranha da figura se deve a uma ordenação lexicográfica ("9" > "11" quando os dois são strings). 

Passamos quase a tarde inteira tentando encontrar maneiras de manter como alfa-numérico e ordenar corretamente. Não vou fechar essa issue porque ainda continuamos tentando encontrar uma solução que agrade a todos, e por isso não vou fechar essa issue, mas a chance de ficar sem solução é possível.

**UPDATE:** a @tapumar e eu conseguimos encontrar uma forma bem complexa de consertar a ordenação. Em retrospecto, eu admito que foi um **erro** eu aceitar o PR da issue #879. Pelo menos fica a lição para o futuro.

Resolving patch:
diff --git a/sapl/norma/views.py b/sapl/norma/views.py
--- a/sapl/norma/views.py
+++ b/sapl/norma/views.py
@@ -72,7 +72,7 @@ class NormaPesquisaView(FilterView):
     def get_queryset(self):
         qs = super().get_queryset()
 
-        qs.select_related('tipo', 'materia')
+        qs = qs.extra({'norma_i': "CAST(regexp_replace(numero,'[^0-9]','', 'g') AS INTEGER)", 'norma_letra': "regexp_replace(numero,'[^a-zA-Z]','', 'g')"}).order_by('-data', '-norma_i', '-norma_letra')
 
         return qs
 


Test patch:
Repository: interlegis/sapl

Issue:
Checagem de datas de Frente Parlamentar e coluna extra na listagem
- A data da dissolução deve ser posterior à data de criação;
- A data da dissolução, quando houver, deveria constar na consulta que mostra a lista de frentes parlamentares.


Discussion:

Resolving patch:
diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py
--- a/sapl/parlamentares/forms.py
+++ b/sapl/parlamentares/forms.py
@@ -318,18 +318,32 @@ class Meta:
         model = Frente
         fields = '__all__'
 
+    def clean(self):
+        frente = super(FrenteForm, self).clean()
+        cd = self.cleaned_data
+        if not self.is_valid():
+            return self.cleaned_data
+
+        if cd['data_criacao'] >= cd['data_extincao']:
+            raise ValidationError(_("Data Dissolução não pode ser anterior a Data Criação"))
+
+        return cd
+
     @transaction.atomic
     def save(self, commit=True):
         frente = super(FrenteForm, self).save(commit)
-        content_type = ContentType.objects.get_for_model(Frente)
-        object_id = frente.pk
-        tipo = TipoAutor.objects.get(descricao__icontains='Frente')
-        Autor.objects.create(
-            content_type=content_type,
-            object_id=object_id,
-            tipo=tipo,
-            nome=frente.nome
-        )
+        
+        if not self.instance.pk:
+            frente = super(FrenteForm, self).save(commit)
+            content_type = ContentType.objects.get_for_model(Frente)
+            object_id = frente.pk
+            tipo = TipoAutor.objects.get(descricao__icontains='Frente')
+            Autor.objects.create(
+                content_type=content_type,
+                object_id=object_id,
+                tipo=tipo,
+                nome=frente.nome
+            )
         return frente
 
 
diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py
--- a/sapl/parlamentares/views.py
+++ b/sapl/parlamentares/views.py
@@ -87,8 +87,7 @@ class FrenteList(MasterDetailCrud):
     CreateView, UpdateView, DeleteView = None, None, None
 
     class BaseMixin(Crud.PublicMixin, MasterDetailCrud.BaseMixin):
-        list_field_names = ['nome', 'data_criacao']
-
+        list_field_names = ['nome', 'data_criacao', 'data_extincao']
         @classmethod
         def url_name(cls, suffix):
             return '%s_parlamentar_%s' % (cls.model._meta.model_name, suffix)
@@ -282,7 +281,8 @@ class FrenteCrud(CrudAux):
     model = Frente
     help_topic = 'tipo_situa_militar'
     public = [RP_DETAIL, RP_LIST]
-    list_field_names = ['nome', 'data_criacao', 'parlamentares']
+    list_field_names = ['nome', 'data_criacao', 'data_extincao', 'parlamentares']
+
 
     class CreateView(Crud.CreateView):
         form_class = FrenteForm
@@ -290,6 +290,10 @@ class CreateView(Crud.CreateView):
         def form_valid(self, form):
             return super(Crud.CreateView, self).form_valid(form)
 
+    class UpdateView(Crud.UpdateView):
+        form_class = FrenteForm
+
+
 
 class MandatoCrud(MasterDetailCrud):
     model = Mandato


Test patch:
Repository: interlegis/sapl

Issue:
Mandato Parlamentar - Validação de datas
- As datas de início e fim do mandato devem estar dentro do período da legislatura selecionada. 

- A data da expedição do diploma deve ser anterior a data de início do mandato. 

- A coligação eventualmente selecionada, pela qual o parlamentar se elegeu, deve ter sido cadastrada na mesma legislatura do mandato.
Mandato Parlamentar - Validação de datas
- As datas de início e fim do mandato devem estar dentro do período da legislatura selecionada. 

- A data da expedição do diploma deve ser anterior a data de início do mandato. 

- A coligação eventualmente selecionada, pela qual o parlamentar se elegeu, deve ter sido cadastrada na mesma legislatura do mandato.


Discussion:

Resolving patch:
diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py
--- a/sapl/parlamentares/forms.py
+++ b/sapl/parlamentares/forms.py
@@ -99,6 +99,19 @@ def clean(self):
                 raise ValidationError(_("Data fim mandato fora do intervalo de"
                                         " legislatura informada"))
 
+        data_expedicao_diploma = data['data_expedicao_diploma']
+        if (data_expedicao_diploma and
+                data_expedicao_diploma > data_inicio_mandato):
+                raise ValidationError(_("A data da expedição do diploma deve ser anterior "
+                                        "a data de início do mandato"))
+
+        coligacao = data['coligacao']
+        if coligacao and not coligacao.legislatura == legislatura:
+                raise ValidationError(_("A coligação selecionada não está cadastrada "
+                                        "na mesma legislatura que o presente mandato, "
+                                        "favor verificar a coligação ou fazer o cadastro "
+                                        "de uma nova coligação na legislatura correspondente"))
+
         existe_mandato = Mandato.objects.filter(
             parlamentar=data['parlamentar'],
             legislatura=data['legislatura']).exists()


Test patch:
Repository: interlegis/sapl

Issue:
1º Contato: Assembleia Legislativa de Sergipe , Mudança { Site da Câmara , Vereador }
Bom dia, Trabalho na casa Legislativa de Sergipe e meu chefe, o direto de T.I. desta casa, solicitou me que entrasse em contato com os senhores, para ver se seria possível fazer algumas alterações simples nos layout do sistema. 

1 - Trocar o nome Site da Câmara ( Localizado no Rodapé ).   por = > Site . Ou outro nome que seja genérico.

2 - Trocar o nome de apresentação "Vereador"  por => Parlamentar .

No intuito de deixar genérico para que possa ser usado nesta casa como também em outas casas tanto do poder legislativo quanto das camarás municipais 

Grato.


Discussion:
Boa tarde!

Agradeço pelas sugestões.

O item número 2, onde está escrito "Vereador"?
Fica no endereço : http://<server>/parlamentar/<int>/mandato/create
                          & http://<server>/parlamentar/<int>/mandato

Do Model.py : - verbose_name=_('Vereador Titular')) Linha -446




Resolving patch:
diff --git a/sapl/parlamentares/migrations/0024_auto_20180814_1237.py b/sapl/parlamentares/migrations/0024_auto_20180814_1237.py
new file mode 100644
--- /dev/null
+++ b/sapl/parlamentares/migrations/0024_auto_20180814_1237.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2018-08-14 15:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('parlamentares', '0023_auto_20180626_1524'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='mandato',
+            name='titular',
+            field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], db_index=True, default=True, verbose_name='Parlamentar Titular'),
+        ),
+    ]
diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py
--- a/sapl/parlamentares/models.py
+++ b/sapl/parlamentares/models.py
@@ -443,7 +443,7 @@ class Mandato(models.Model):
         db_index=True,
         default=True,
         choices=YES_NO_CHOICES,
-        verbose_name=_('Vereador Titular'))
+        verbose_name=_('Parlamentar Titular'))
 
     observacao = models.TextField(
         blank=True, verbose_name=_('Observação'))


Test patch:
Repository: interlegis/sapl

Issue:
Audiências Públicas sem possibilidade de Edição
Ao criar uma Audiência Pública e salva-la, não aparecem os metadados da matéria legislativa inseridas no preenchimento. 
Ao clicar em Editar, só  aparece o título da audiência criada.
grato


Discussion:
Edição de uma Audiência continua só aparecendo o título. 

![image](https://user-images.githubusercontent.com/30807716/44156849-57442f46-a087-11e8-91b6-cb01e57fc379.png)

Vi que esse problema ocorre quando não tem uma matéria legislativa vinculada à Audiência Pública, vou ver o que pode estar causando isso e corrigir.

Resolving patch:
diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py
--- a/sapl/audiencia/views.py
+++ b/sapl/audiencia/views.py
@@ -34,9 +34,10 @@ class UpdateView(Crud.UpdateView):
 
         def get_initial(self):
             initial = super(UpdateView, self).get_initial()
-            initial['tipo_materia'] = self.object.materia.tipo.id
-            initial['numero_materia'] = self.object.materia.numero
-            initial['ano_materia'] = self.object.materia.ano
+            if self.object.materia:
+                initial['tipo_materia'] = self.object.materia.tipo.id
+                initial['numero_materia'] = self.object.materia.numero
+                initial['ano_materia'] = self.object.materia.ano
             return initial
      
     class DeleteView(Crud.DeleteView):


Test patch:
Repository: interlegis/sapl

Issue:
Adicionar norma jurídica: buscar indexação da matéria correspondente
Ao adicionar uma norma jurídica, informa-se a matéria legislativa que a originou e o sistema busca a respectiva ementa. Sugiro que busque também a Indexação.


Discussion:

Resolving patch:
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -460,9 +460,10 @@ def recuperar_materia(request):
                                                  ano=ano,
                                                  numero=numero)
         response = JsonResponse({'ementa': materia.ementa,
-                                 'id': materia.id})
+                                 'id': materia.id,
+                                 'indexacao': materia.indexacao})
     except ObjectDoesNotExist:
-        response = JsonResponse({'ementa': '', 'id': 0})
+        response = JsonResponse({'ementa': '', 'id': 0, 'indexacao':''})
 
     return response
 


Test patch:
Repository: interlegis/sapl

Issue:
Comissão Temporária - inconsistências entre datas
- data prevista para término - deve ser posterior à data de criação;
- data - novo prazo -  também deve ser posterior à data de criação;
- data de instalação - deve ser superior à data de criação e anterior à data prevista para término ou a data do novo prazo (prevista para o término).


Discussion:

Resolving patch:
diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py
--- a/sapl/comissoes/forms.py
+++ b/sapl/comissoes/forms.py
@@ -245,11 +245,36 @@ def clean(self):
         if len(self.cleaned_data['nome']) > 100:
             msg = _('Nome da Comissão deve ter no máximo 50 caracteres.')
             raise ValidationError(msg)
-        if self.cleaned_data['data_extincao']:
-            if (self.cleaned_data['data_extincao'] <
-                    self.cleaned_data['data_criacao']):
+        if (self.cleaned_data['data_extincao'] and
+            self.cleaned_data['data_extincao'] <
+                self.cleaned_data['data_criacao']):
                 msg = _('Data de extinção não pode ser menor que a de criação')
                 raise ValidationError(msg)
+        if (self.cleaned_data['data_final_prevista_temp'] and
+            self.cleaned_data['data_final_prevista_temp'] <
+                self.cleaned_data['data_criacao']):
+                msg = _('Data Prevista para Término não pode ser menor que a de criação')
+                raise ValidationError(msg)
+        if (self.cleaned_data['data_prorrogada_temp'] and
+            self.cleaned_data['data_prorrogada_temp'] <
+                self.cleaned_data['data_criacao']):
+                msg = _('Data Novo Prazo não pode ser menor que a de criação')
+                raise ValidationError(msg)
+        if (self.cleaned_data['data_instalacao_temp'] and
+            self.cleaned_data['data_instalacao_temp'] <
+                self.cleaned_data['data_criacao']):
+                msg = _('Data de Instalação não pode ser menor que a de criação')
+                raise ValidationError(msg)
+        if (self.cleaned_data['data_final_prevista_temp'] and self.cleaned_data['data_instalacao_temp'] and
+            self.cleaned_data['data_final_prevista_temp'] <
+                self.cleaned_data['data_instalacao_temp']):
+                msg = _('Data Prevista para Término não pode ser menor que a de Instalação')
+                raise ValidationError(msg)
+        if (self.cleaned_data['data_prorrogada_temp'] and self.cleaned_data['data_instalacao_temp'] and
+            self.cleaned_data['data_prorrogada_temp'] <
+                self.cleaned_data['data_instalacao_temp']):
+                msg = _('Data Novo Prazo não pode ser menor que a de Instalação')
+                raise ValidationError(msg)
         return self.cleaned_data
 
     @transaction.atomic


Test patch:
Repository: interlegis/sapl

Issue:
Protocolo Geral - Tipo de Apresentação
Prezados.
Ao protocolar um documento, em momento algum é perguntado sobre qual o TIPO DE APRESENTAÇÃO.
Quando concluímos a inclusão do documento, temos que EDITAR para alterar o Tipo de Apresentação.
![tipo_apresentacao](https://user-images.githubusercontent.com/42471491/44271212-ec737980-a20f-11e8-91bc-6c2533c86fa1.jpg)

Considerando que existem apenas dois tipos (ORAL ou ESCRITA) e que, na maioria das vezes a apresentação será feita de forma escrita. Sugiro que o campo já venha preenchido com o valor padrão ESCRITA.
Ou, então, que este campo seja perguntado antes, assim como se pergunta qual o Regime de Tramitação.
Protocolo Geral - Tipo de Apresentação
Prezados.
Ao protocolar um documento, em momento algum é perguntado sobre qual o TIPO DE APRESENTAÇÃO.
Quando concluímos a inclusão do documento, temos que EDITAR para alterar o Tipo de Apresentação.
![tipo_apresentacao](https://user-images.githubusercontent.com/42471491/44271212-ec737980-a20f-11e8-91bc-6c2533c86fa1.jpg)

Considerando que existem apenas dois tipos (ORAL ou ESCRITA) e que, na maioria das vezes a apresentação será feita de forma escrita. Sugiro que o campo já venha preenchido com o valor padrão ESCRITA.
Ou, então, que este campo seja perguntado antes, assim como se pergunta qual o Regime de Tramitação.


Discussion:

Resolving patch:
diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -123,13 +123,14 @@ class Meta:
         model = MateriaLegislativa
         fields = ['tipo', 'numero', 'ano', 'data_apresentacao',
                   'numero_protocolo', 'regime_tramitacao',
-                  'em_tramitacao', 'ementa', 'texto_original']
+                  'em_tramitacao', 'ementa', 'tipo_apresentacao',
+                  'texto_original']
 
     def __init__(self, *args, **kwargs):
 
         row1 = to_row([('tipo', 6), ('numero', 3), ('ano', 3)])
         row2 = to_row([('data_apresentacao', 6), ('numero_protocolo', 6)])
-        row3 = to_row([('regime_tramitacao', 6), ('em_tramitacao', 6)])
+        row3 = to_row([('regime_tramitacao', 6), ('em_tramitacao', 3), ('tipo_apresentacao', 3)])
         row4 = to_row([('ementa', 12)])
         row5 = to_row([('texto_original', 12)])
 


Test patch:
Repository: interlegis/sapl

Issue:
Problemas no combo parlamentares ao editar relatoria
Texto retirado do ticket #776265

"Olá!
Estamos encontrando problemas ao editar relatorias.
Ao preencher em tramitação a comissão em que a matéria está tramitando, já informamos o Relator em relatorias, bem como a data de designação e o nome do parlamentar. 
Ao recebermos o parecer do relator, vamos em editar relatoria para colocar a data de destituição e o motivo, porém ao editar desaparece o nome do parlamentar que nomeamos relator, conforme prints anexos.
Outra situação é que aparece, algumas vezes, os nomes de parlamentares da Sessão Legislativa de 2017."

![image](https://user-images.githubusercontent.com/19825887/44529965-c17f9e80-a6c3-11e8-9995-b09a3c4d8592.png)

![image](https://user-images.githubusercontent.com/19825887/44529978-c6dce900-a6c3-11e8-861c-69f3d2376e49.png)

![image](https://user-images.githubusercontent.com/19825887/44529985-ca707000-a6c3-11e8-9a8c-610f622b52a8.png)



Discussion:

Resolving patch:
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -1023,7 +1023,8 @@ def get_context_data(self, **kwargs):
             except ObjectDoesNotExist:
                 pass
             else:
-                composicao = comissao.composicao_set.last()
+                composicao = comissao.composicao_set.order_by(
+                    '-periodo__data_inicio').first()
                 participacao = Participacao.objects.filter(
                     composicao=composicao)
 


Test patch: