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

Issue:
PDF da Pauta não mostra tudo!
<A impressão do PDF da Pauta da Sessão não mostra tudo o que está cadastrado na Sessão Plenária, sobretudo o que está nas Matérias do Expediente>

## Comportamento Esperado
Deveria ser o PDF a íntegra do que tem na Sessão Plenária, ou seja, deveria aparecer em PDF tudo o que aparece no HTML da pauta daquela Sessão, mas quando gera o PDF só aparecem algumas matérias.

## Comportamento Atual
Só aparecem algumas matérias em PDF daquelas que estão cadastradas na Sessão Plenária
## Possível Solução
Corrigir o script para aparecer todas as matérias que tramitam naquela Sessão na geração do PDF.
## Passos para Reproduzir (para bugs)
http://sapl.virtuaserver.com.br/sessao/pauta-sessao/251
http://sapl.virtuaserver.com.br/relatorios/pauta-sessao/251/
<!--- para reproduzir esse bug. Inclua código para reproduzir, se relevante. -->
1.
2.
3.
4.

## Contexto
Esse problema tem afeta tanto ao Departamento Legislativo, quanto aos assessores dos Vereadores que não conseguem gerar a pauta para enviá-la eletronicamente aos seus parlamentares.Reclamação geral.

## Imagens do Ocorrido
<!--- Representação visual em vídeo ou imagem do ocorrido -->
<!--- Se está descrevendo um bug poste imagens ou vídeos na repordução do bug citado, caso se aplique --:

## Seu Ambiente
* Usamos o SAPL 3.1.134
* Nome e versão do navegador: Qualquer Navegador
* Nome e versão do Sistema Operacional (desktop ou mobile): Ubuntu 16.04
* Link para o seu projeto (Caso de fork deste projeto):


Discussion:
@Neybson Você sabe me disser em qual versão do sapl você está? Esse problema já havia sido resolvido anteriormente. 
Já encontrei aqui a versão. 

Não consegui reproduzir aqui (em uma base de dados real). Poderia enviar um dump dessa base de dados que vc está usando?
posso sim, envio pra onde?

Resolving patch:
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
--- a/sapl/relatorios/views.py
+++ b/sapl/relatorios/views.py
@@ -1083,8 +1083,7 @@ def get_pauta_sessao(sessao, casa):
     inf_basicas_dic["nom_camara"] = casa.nome
 
     lst_expediente_materia = []
-    for expediente_materia in ExpedienteMateria.objects.filter(
-            data_ordem=sessao.data_inicio, sessao_plenaria=sessao):
+    for expediente_materia in ExpedienteMateria.objects.filter(sessao_plenaria=sessao):
 
         materia = MateriaLegislativa.objects.filter(
             id=expediente_materia.materia.id).first()


Test patch:
Repository: interlegis/sapl

Issue:
Retirada de Pauta - Extrato da Sessão
É importante que apareça no extrato da sessão a retirada de pauta

## Comportamento Esperado
Penso que as informações de retirada de pauta:

![image](https://user-images.githubusercontent.com/13314947/48938394-38614900-eef8-11e8-9698-774f102048c6.png)

Poderia ser colocadas antes de ocorrências da sessão:
![image](https://user-images.githubusercontent.com/13314947/48938494-8a09d380-eef8-11e8-83dc-b1e118ccf177.png)



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
@@ -1383,10 +1383,13 @@ def get(self, request, *args, **kwargs):
                 turno = get_turno(tramitacao.turno)
 
             rv = m.registrovotacao_set.first()
+            rp = m.retiradapauta_set.filter(materia=m.materia).first()
             if rv:
                 resultado = rv.tipo_resultado_votacao.nome
                 resultado_observacao = rv.observacao
-
+            elif rp:
+                resultado = rp.tipo_de_retirada.descricao
+                resultado_observacao = rp.observacao
             else:
                 resultado = _('Matéria não votada')
                 resultado_observacao = _(' ')
@@ -1474,9 +1477,13 @@ def get(self, request, *args, **kwargs):
 
             # Verificar resultado
             rv = o.registrovotacao_set.filter(materia=o.materia).first()
+            rp = o.retiradapauta_set.filter(materia=o.materia).first()
             if rv:
                 resultado = rv.tipo_resultado_votacao.nome
                 resultado_observacao = rv.observacao
+            elif rp:
+                resultado = rp.tipo_de_retirada.descricao
+                resultado_observacao = rp.observacao
             else:
                 resultado = _('Matéria não votada')
                 resultado_observacao = _(' ')


Test patch:
Repository: interlegis/sapl

Issue:
Parlamentar duplicado na listagem
<!--- Forneça um resumo geral da _issue_ no título acima -->

## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->
Cada parlamenar deve aperecer apenas uma vez na listagem de parlamentares dentro daquela legislatura.
## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Caso um parlamentar possua mais de um mandato na mesma legislatura (o que ocorre quando ele é suplente), ele é listado duas vezes na lista de parlamentares daquela legislatura.
## Possível Solução
<!--- Não é obrigatório, mas sugira uma possível correção/razão para o bug -->
<!--- ou ideias de como implementar a adição/mudança. -->
Na hora de montar a lista de parlamentares usar um distinct.
## Passos para Reproduzir (para bugs)
<!--- Forneça um link para um exemplo, ou um conjunto de passos inequívocos -->
<!--- para reproduzir esse bug. Inclua código para reproduzir, se relevante. -->
1. Criar dois mandatos para o mesmo parlamentar na mesma legislatura
2. Ir na listagem de parlamentares

## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_): 3.1.136


Discussion:
![image](https://user-images.githubusercontent.com/19825887/49287118-6825c900-f483-11e8-8969-2e87a256b541.png)


Resolving patch:
diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py
--- a/sapl/parlamentares/views.py
+++ b/sapl/parlamentares/views.py
@@ -498,7 +498,7 @@ def get_queryset(self):
             if legislatura_id >= 0:
                 return queryset.filter(
                     mandato__legislatura_id=legislatura_id).annotate(
-                        mandato_titular=F('mandato__titular'))
+                        mandato_titular=F('mandato__titular')).distinct()
             else:
                 try:
                     self.logger.debug("user=" + username + ". Tentando obter o mais recente registro do objeto Legislatura.")


Test patch:
Repository: interlegis/sapl

Issue:
Norma jurídica - sugestão de próxima numeração
A sugestão de próxima numeração no cadastro de novas normas jurídicas para em 10000.

## Comportamento Esperado
Deveria sugerir o próximo numero como até o 10000
10001, 10002




Discussion:
Você fez um commit 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) e para de funcionar no 10000. 

Resolving patch:
diff --git a/sapl/norma/views.py b/sapl/norma/views.py
--- a/sapl/norma/views.py
+++ b/sapl/norma/views.py
@@ -274,16 +274,19 @@ 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
+    param = {'tipo': tipo,
+             'ano': ano if ano else timezone.now().year
+             }
     norma = NormaJuridica.objects.filter(**param).order_by(
-        'tipo', 'ano', 'numero').values_list('numero', 'ano').last()
+        'tipo', 'ano', 'numero').values_list('numero', flat=True)
     if norma:
-        response = JsonResponse({'numero': int(re.sub("[^0-9].*", '', norma[0])) + 1,
-                                 'ano': norma[1]})
+        numeros = sorted([int(re.sub("[^0-9].*", '', n)) for n in norma])
+        next_num = numeros.pop() + 1
+        response = JsonResponse({'numero': next_num,
+                                 'ano': param['ano']})
     else:
         response = JsonResponse(
-            {'numero': 1, 'ano': ano})
+            {'numero': 1, 'ano': param['ano']})
 
     return response
 


Test patch:
Repository: interlegis/sapl

Issue:
Campo Motivo (anulação de protocolo) curto
## Comportamento Esperado
Aumentar a quantidade de caracteres a serem digitados no campo Motivo

## Comportamento Atual
O campo Motivo aceita apenas 60 caracteres, o que ao meu ver, é pouco para detalhar uma anulação.

## Possível Solução
Aumentar para pelo menos duas linhas de texto (260 caracteres)

## Contexto
60 caracteres acredito ser insuficientes para que o usuário possa descrever com detalhes o motivo da anulação do protocolo.


## Imagens do Ocorrido
![image](https://user-images.githubusercontent.com/30807716/49893095-c4003280-fe31-11e8-9ee6-9ad09543b85a.png)




Discussion:

Resolving patch:
diff --git a/sapl/protocoloadm/migrations/0010_auto_20181212_1900.py b/sapl/protocoloadm/migrations/0010_auto_20181212_1900.py
new file mode 100644
--- /dev/null
+++ b/sapl/protocoloadm/migrations/0010_auto_20181212_1900.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.8 on 2018-12-12 21:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('protocoloadm', '0009_merge'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='protocolo',
+            name='justificativa_anulacao',
+            field=models.CharField(blank=True, max_length=260, verbose_name='Motivo'),
+        ),
+    ]
diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py
--- a/sapl/protocoloadm/models.py
+++ b/sapl/protocoloadm/models.py
@@ -93,7 +93,7 @@ class Protocolo(models.Model):
     user_anulacao = models.CharField(max_length=20, blank=True)
     ip_anulacao = models.CharField(max_length=15, blank=True)
     justificativa_anulacao = models.CharField(
-        max_length=60, blank=True, verbose_name=_('Motivo'))
+        max_length=260, blank=True, verbose_name=_('Motivo'))
     timestamp_anulacao = models.DateTimeField(blank=True, null=True)
 
     class Meta:


Test patch:
Repository: interlegis/sapl

Issue:
Campo Horário de Término (de reunião de comissão) obrigatório!
<!--- Forneça um resumo geral da _issue_ no título acima -->

## Comportamento Esperado
Deixar o campo Horário de Término da reunião de comissão sem a obrigatoriedade de preenchimento.

## Comportamento Atual
Exigência do preenchimento do campo


## Contexto
Sem o preenchimento desse campo, o registro não pode ser salvo.

## Imagens do Ocorrido
![image](https://user-images.githubusercontent.com/30807716/49892621-8ea71500-fe30-11e8-931d-456d55f42c27.png)



Discussion:
Deixar esse campo não obrigatório é a certeza de nunca o preeencherem em 80% das vezes. Qual a justificativa pra tirar essa obrigatoriedade? A pessoa pode colocar uma estimativa de fim e depois só atualizar para a hora real, se necessário.

Resolving patch:
diff --git a/sapl/comissoes/migrations/0019_auto_20181214_1023.py b/sapl/comissoes/migrations/0019_auto_20181214_1023.py
new file mode 100644
--- /dev/null
+++ b/sapl/comissoes/migrations/0019_auto_20181214_1023.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.8 on 2018-12-14 12:23
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('comissoes', '0018_auto_20180924_1724'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='reuniao',
+            name='hora_fim',
+            field=models.TimeField(blank=True, null=True, verbose_name='Horário de Término (hh:mm)'),
+        ),
+    ]
diff --git a/sapl/comissoes/models.py b/sapl/comissoes/models.py
--- a/sapl/comissoes/models.py
+++ b/sapl/comissoes/models.py
@@ -221,6 +221,7 @@ class Reuniao(models.Model):
         null=True,
         verbose_name=_('Horário de Início (hh:mm)'))
     hora_fim = models.TimeField(
+        blank=True,
         null=True,
         verbose_name=_('Horário de Término (hh:mm)'))
     local_reuniao = models.CharField(


Test patch:
diff --git a/sapl/comissoes/tests/test_comissoes.py b/sapl/comissoes/tests/test_comissoes.py
--- a/sapl/comissoes/tests/test_comissoes.py
+++ b/sapl/comissoes/tests/test_comissoes.py
@@ -139,7 +139,6 @@ def test_valida_campos_obrigatorios_reuniao_form():
     assert errors['nome'] == [_('Este campo é obrigatório.')]
     assert errors['data'] == [_('Este campo é obrigatório.')]
     assert errors['hora_inicio'] == [_('Este campo é obrigatório.')]
-    assert errors['hora_fim'] == [_('Este campo é obrigatório.')]
 
-    assert len(errors) == 7
+    assert len(errors) == 6
Repository: interlegis/sapl

Issue:
Campo Número de Protocolo desprotegido  ao criar matéria ou documento
## Comportamento Esperado
Bloquear o campo Número de Protocolo para não permitir a sua alteração após a criação do documento.

## Comportamento Atual
No ato de criar um documento ou matéria após a protocolização, o campo Número de Protocolo fica livre para alteração.

## Possível Solução
Bloquear o campo para impossibilitá-lo  de ser alterado.


## Contexto
Caso esse campo seja alterado (propositalmente ou não), obviamente o número alterado não corresponderá mais ao numero de protocolo criado automaticamente, o que poderá provocar confusão posteriormente.

## Imagens do Ocorrido
![image](https://user-images.githubusercontent.com/30807716/49893770-60770480-fe33-11e8-9e92-b6ed57ded9b2.png)



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
@@ -127,6 +127,9 @@ class Meta:
                   'numero_protocolo', 'regime_tramitacao',
                   'em_tramitacao', 'ementa', 'tipo_apresentacao',
                   'texto_original']
+        widgets = {
+            'numero_protocolo': forms.TextInput(attrs={'readonly': True}),
+        }
 
     def __init__(self, *args, **kwargs):
 


Test patch:
Repository: interlegis/sapl

Issue:
Parlamentar ausente na Ordem do Dia não aparece na caixa de opção de ausentes
## Comportamento Esperado
Parlamentar ausente na Ordem do Dia deveria ser listado entre os parlamentares para justificar ausência.

## Comportamento Atual
Aparecem na combo os parlamentares ausentes à sessão, mas não os ausentes à Ordem do Dia (Ver. Derli, no caso abaixo).

## Passos para Reproduzir (para bugs)
https://sapl.agudo.rs.leg.br/sessao/1449/presenca
https://sapl.agudo.rs.leg.br/sessao/1449/presencaordemdia
https://sapl.agudo.rs.leg.br/sessao/1449/justificativaausencia/create

## Contexto
Inserção de justificativa de ausência à Ordem do Dia.

## Imagens do Ocorrido
![captura de tela de 2018-12-12 09-38-26](https://user-images.githubusercontent.com/19169882/49868141-a9a76400-fdf3-11e8-85fc-a1a2da896af7.png)
![captura de tela de 2018-12-12 09-38-59](https://user-images.githubusercontent.com/19169882/49868163-b62bbc80-fdf3-11e8-819a-29e6f4fd3775.png)

## Seu Ambiente
Versão usada (Release): 3.1.137
Nome e versão do navegador: Versão 70.0.3538.77 (Versão oficial)
Nome e versão do Sistema Operacional (desktop ou mobile): Ubuntu 16.04 64 bits


Discussion:

Resolving patch:
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -24,7 +24,7 @@
                         MateriaPesquisaOrderingFilter, autor_label,
                         autor_modal, timezone)
 from .models import (Bancada, Bloco, ExpedienteMateria, Orador, JustificativaAusencia,
-                     OradorExpediente, OrdemDia, SessaoPlenaria,
+                     OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
                      SessaoPlenariaPresenca, TipoResultadoVotacao, OcorrenciaSessao,
                      RetiradaPauta, TipoRetiradaPauta)
 
@@ -841,7 +841,8 @@ def __init__(self, *args, **kwargs):
         ordens = OrdemDia.objects.filter(q)
         expedientes = ExpedienteMateria.objects.filter(q)
         legislatura = kwargs['initial']['sessao_plenaria'].legislatura
-        mandato = Mandato.objects.filter(legislatura=legislatura)
+        mandato = Mandato.objects.filter(
+            legislatura=legislatura).order_by('parlamentar__nome_parlamentar')
         parlamentares = [m.parlamentar for m in mandato]
 
 
@@ -850,9 +851,14 @@ def __init__(self, *args, **kwargs):
 
         presencas = SessaoPlenariaPresenca.objects.filter(
             q).order_by('parlamentar__nome_parlamentar')
+        presencas_ordem = PresencaOrdemDia.objects.filter(
+            q).order_by('parlamentar__nome_parlamentar')
 
         presentes = [p.parlamentar for p in presencas]
-        setFinal = set(parlamentares) - set(presentes)
+        presentes_ordem = [p.parlamentar for p in presencas_ordem]
+
+        presentes_ambos = set(presentes).intersection(set(presentes_ordem))
+        setFinal = set(parlamentares) - presentes_ambos
 
         self.fields['materias_do_expediente'].choices = [
             (e.id, e.materia) for e in expedientes]


Test patch:
Repository: interlegis/sapl

Issue:
Acrescentar se o parlamentar é titular no relatório de presenças
<!--- Forneça um resumo geral da _issue_ no título acima -->
## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->
No relatório de presenças, colocar uma coluna indicando se o parlamentar é titular ou não.
## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Não existe essa coluna.

## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_): 3.1.138

Issue criada após falar com o @54adal 


Discussion:

Resolving patch:
diff --git a/sapl/base/views.py b/sapl/base/views.py
--- a/sapl/base/views.py
+++ b/sapl/base/views.py
@@ -10,7 +10,7 @@
 from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
 from django.core.mail import send_mail
 from django.core.urlresolvers import reverse
-from django.db.models import Count
+from django.db.models import Count, Q
 from django.http import Http404, HttpResponseRedirect
 from django.template import TemplateDoesNotExist
 from django.template.loader import get_template
@@ -373,8 +373,13 @@ def get_context_data(self, **kwargs):
         # Completa o dicionario as informacoes parlamentar/sessao/ordem
         parlamentares_presencas = []
         for i, p in enumerate(parlamentares_qs):
+            m = p.mandato_set.filter(Q(data_inicio_mandato__lte=_range[0], data_fim_mandato__gte=_range[1]) |
+                                     Q(data_inicio_mandato__lte=_range[0], data_fim_mandato__isnull=True) |
+                                     Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1]))
+            m = m.last()
             parlamentares_presencas.append({
                 'parlamentar': p,
+                'titular': m.titular,
                 'sessao_porc': 0,
                 'ordemdia_porc': 0
             })


Test patch:
Repository: interlegis/sapl

Issue:
Votação Matérias ordem do dia
Ao registrar votação de matérias da ordem do dia, ocorre o seguinte erro:
Ocorreu um erro inesperado! Erro 500


Ao tentar colocar em modo debug, ocorre o seguinte:
WARNINGS:
?: (1_10.W001) The MIDDLEWARE_CLASSES setting is deprecated in Django 1.10 and the MIDDLEWARE setting takes precedence. Since you've set MIDDLEWARE, the value of MIDDLEWARE_CLASSES is ignored.





## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_): 3.1.139
* Nome e versão do navegador:
* Nome e versão do Sistema Operacional (desktop ou mobile):
* Link para o seu projeto (Caso de fork deste projeto):


Discussion:

Resolving patch:
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -540,10 +540,10 @@ def clean(self):
         qtde_votos = votos_sim + votos_nao + abstencoes
         voto_presidente = cleaned_data['voto_presidente']
 
-        if not voto_presidente:
+        if qtde_presentes and not voto_presidente:
             qtde_presentes -= 1
 
-        if qtde_votos != qtde_presentes:
+        if qtde_presentes and qtde_votos != qtde_presentes:
             raise ValidationError('O total de votos não corresponde com a quantidade de presentes!')
 
         return cleaned_data
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1902,7 +1902,8 @@ def post(self, request, *args, **kwargs):
                 qtde_presentes -= 1
 
             if (qtde_votos > qtde_presentes or qtde_votos < qtde_presentes):
-                form._errors["total_votos"] = ErrorList([u""])
+                msg = _('O total de votos não corresponde com a quantidade de presentes!')
+                messages.add_message(request, messages.ERROR, msg)
                 return self.render_to_response(context)
             elif (qtde_presentes == qtde_votos):
                 try:
@@ -3330,7 +3331,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
     """
         Votação Simbólica
     """
-
+    app_label = AppConfig.label
     template_name = 'sessao/votacao/votacao_simbolica_bloco.html'
     logger = logging.getLogger(__name__)
 
@@ -3506,6 +3507,7 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView)
     """
         Votação Nominal
     """
+    app_label = AppConfig.label
     template_name = 'sessao/votacao/votacao_nominal_bloco.html'
     logger = logging.getLogger(__name__)
 


Test patch: