Browse Source

Conserto do OsTicket #986795 (#3424)

Co-authored-by: Gustavo274 <Gustavo274@github.com>
pull/3427/head
Gustavo274 4 years ago
committed by GitHub
parent
commit
12847db6dc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 110
      sapl/relatorios/views.py
  2. 66
      sapl/sessao/views.py

110
sapl/relatorios/views.py

@ -535,7 +535,8 @@ def get_sessao_plenaria(sessao, casa):
for composicao in IntegranteMesa.objects.select_related('parlamentar', 'cargo')\
.filter(sessao_plenaria=sessao)\
.order_by('cargo_id'):
partido_sigla = Filiacao.objects.filter(parlamentar=composicao.parlamentar).first()
partido_sigla = Filiacao.objects.filter(
parlamentar=composicao.parlamentar).first()
sigla = '' if not partido_sigla else partido_sigla.partido.sigla
lst_mesa.append({
'nom_parlamentar': composicao.parlamentar.nome_parlamentar,
@ -545,7 +546,8 @@ def get_sessao_plenaria(sessao, casa):
# Lista de presença na sessão
lst_presenca_sessao = []
presenca = SessaoPlenariaPresenca.objects.filter(sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for parlamentar in [p.parlamentar for p in presenca]:
lst_presenca_sessao.append({
"nom_parlamentar": parlamentar.nome_parlamentar,
@ -554,7 +556,8 @@ def get_sessao_plenaria(sessao, casa):
# Lista de ausencias na sessão
lst_ausencia_sessao = []
ausencia = JustificativaAusencia.objects.filter(sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
ausencia = JustificativaAusencia.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for ausente in ausencia:
lst_ausencia_sessao.append({
"parlamentar": ausente.parlamentar,
@ -564,7 +567,8 @@ def get_sessao_plenaria(sessao, casa):
# Exibe os Expedientes
lst_expedientes = []
expedientes = ExpedienteSessao.objects.filter(sessao_plenaria=sessao).order_by('tipo__nome')
expedientes = ExpedienteSessao.objects.filter(
sessao_plenaria=sessao).order_by('tipo__nome')
for e in expedientes:
conteudo = e.conteudo
if not is_empty(conteudo):
@ -572,9 +576,11 @@ def get_sessao_plenaria(sessao, casa):
# https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450
# OSTicket Ticket #796450
conteudo = re.sub('align=".*?"', '', conteudo)
conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450
# OSTicket Ticket #796450
conteudo = re.sub('<br\s+/>', '<br/>', conteudo)
conteudo = html.unescape(conteudo)
# escape special character '&'
@ -612,12 +618,15 @@ def get_sessao_plenaria(sessao, casa):
"votacao_observacao": ' '
}
numeracao = Numeracao.objects.filter(materia=expediente_materia.materia).first()
numeracao = Numeracao.objects.filter(
materia=expediente_materia.materia).first()
if numeracao:
dic_expediente_materia["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
dic_expediente_materia["des_numeracao"] = (
str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
autoria = materia.autoria_set.all()
dic_expediente_materia['num_autores'] = 'Autores' if len(autoria) > 1 else 'Autor'
dic_expediente_materia['num_autores'] = 'Autores' if len(
autoria) > 1 else 'Autor'
if autoria:
for a in autoria:
if a.autor.nome:
@ -630,14 +639,19 @@ def get_sessao_plenaria(sessao, casa):
materia=expediente_materia.materia).first()
rp = expediente_materia.retiradapauta_set.filter(
materia=expediente_materia.materia).first()
rl = expediente_materia.registroleitura_set.filter(
materia=expediente_materia.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
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else:
resultado = _('Matéria lida') \
resultado = _('Matéria não lida') \
if expediente_materia.tipo_votacao == 4 \
else _('Matéria não votada')
resultado_observacao = _(' ')
@ -672,8 +686,10 @@ def get_sessao_plenaria(sessao, casa):
# Lista dos oradores do Expediente
lst_oradores_expediente = []
for orador_expediente in OradorExpediente.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = Parlamentar.objects.get(id=orador_expediente.parlamentar.id)
partido_sigla = Filiacao.objects.filter(parlamentar=parlamentar).first()
parlamentar = Parlamentar.objects.get(
id=orador_expediente.parlamentar.id)
partido_sigla = Filiacao.objects.filter(
parlamentar=parlamentar).first()
lst_oradores_expediente.append({
"num_ordem": orador_expediente.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar,
@ -709,7 +725,8 @@ def get_sessao_plenaria(sessao, casa):
numeracao = materia.numeracao_set.first()
if numeracao:
dic_votacao["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
dic_votacao["des_numeracao"] = (
str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
materia_em_tramitacao = materia.materiaemtramitacao_set.first()
dic_votacao.update({
@ -736,14 +753,19 @@ def get_sessao_plenaria(sessao, casa):
materia=votacao.materia).first()
rp = votacao.retiradapauta_set.filter(
materia=votacao.materia).first()
rl = votacao.registroleitura_set.filter(
materia=votacao.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
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else:
resultado = _('Matéria lida') if \
resultado = _('Matéria não lida') if \
votacao.tipo_votacao == 4 else _('Matéria não votada')
resultado_observacao = _(' ')
@ -777,11 +799,14 @@ def get_sessao_plenaria(sessao, casa):
# Lista dos oradores da Ordem do Dia
lst_oradores_ordemdia = []
oradores_ordem_dia = OradorOrdemDia.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem')
oradores_ordem_dia = OradorOrdemDia.objects.filter(
sessao_plenaria=sessao).order_by('numero_ordem')
for orador_ordemdia in oradores_ordem_dia:
parlamentar_orador = Parlamentar.objects.get(id=orador_ordemdia.parlamentar.id)
sigla_partido = Filiacao.objects.filter(parlamentar=parlamentar_orador).first()
parlamentar_orador = Parlamentar.objects.get(
id=orador_ordemdia.parlamentar.id)
sigla_partido = Filiacao.objects.filter(
parlamentar=parlamentar_orador).first()
lst_oradores_ordemdia.append({
"num_ordem": orador_ordemdia.numero_ordem,
@ -794,7 +819,8 @@ def get_sessao_plenaria(sessao, casa):
lst_oradores = []
for orador in Orador.objects.select_related('parlamentar').filter(sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = orador.parlamentar
partido_sigla = orador.parlamentar.filiacao_set.select_related('partido', 'parlamentar').first()
partido_sigla = orador.parlamentar.filiacao_set.select_related(
'partido', 'parlamentar').first()
lst_oradores.append({
"num_ordem": orador.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar,
@ -841,7 +867,8 @@ def get_sessao_plenaria(sessao, casa):
def get_turno(materia):
descricao_turno = ''
descricao_tramitacao = ''
tramitacoes = materia.tramitacao_set.order_by('-data_tramitacao', '-id').all()
tramitacoes = materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').all()
tramitacoes_turno = tramitacoes.exclude(turno="")
if tramitacoes:
@ -850,7 +877,8 @@ def get_turno(materia):
if t[0] == tramitacoes_turno.first().turno:
descricao_turno = str(t[1])
break
descricao_tramitacao = tramitacoes.first().status.descricao if tramitacoes.first().status else 'Não informada'
descricao_tramitacao = tramitacoes.first(
).status.descricao if tramitacoes.first().status else 'Não informada'
return descricao_turno, descricao_tramitacao
@ -1231,9 +1259,11 @@ def get_pauta_sessao(sessao, casa):
# https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450
# OSTicket Ticket #796450
conteudo = re.sub('align=".*?"', '', conteudo)
conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450
# OSTicket Ticket #796450
conteudo = re.sub('<br\s+/>', '<br/>', conteudo)
conteudo = html.unescape(conteudo)
# escape special character '&'
@ -1263,7 +1293,8 @@ def make_pdf(base_url, main_template, header_template, main_css='', header_css='
# Template of header
html = HTML(base_url=base_url, string=header_template)
header = html.render(stylesheets=[CSS(string='@page {size:A4; margin:1cm;}')])
header = html.render(
stylesheets=[CSS(string='@page {size:A4; margin:1cm;}')])
header_page = header.pages[0]
header_body = get_page_body(header_page._page_box.all_children())
@ -1301,12 +1332,15 @@ def resumo_ata_pdf(request, pk):
context.update({'object': sessao_plenaria})
context.update({'data': dt.today().strftime('%d/%m/%Y')})
context.update({'rodape': rodape})
header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL}
header_context = {"casa": casa,
'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL}
html_template = render_to_string('relatorios/relatorio_ata.html', context)
html_header = render_to_string('relatorios/header_ata.html', header_context)
html_header = render_to_string(
'relatorios/header_ata.html', header_context)
pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header)
pdf_file = make_pdf(
base_url=base_url, main_template=html_template, header_template=html_header)
response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
@ -1324,12 +1358,15 @@ def cria_relatorio(request, context, html_string, header_info=""):
context.update({'data': dt.today().strftime('%d/%m/%Y')})
context.update({'rodape': rodape})
header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL, 'info': header_info}
header_context = {"casa": casa, 'logotipo': casa.logotipo,
'MEDIA_URL': MEDIA_URL, 'info': header_info}
html_template = render_to_string(html_string, context)
html_header = render_to_string('relatorios/header_ata.html', header_context)
html_header = render_to_string(
'relatorios/header_ata.html', header_context)
pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header)
pdf_file = make_pdf(
base_url=base_url, main_template=html_template, header_template=html_header)
response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
@ -1520,7 +1557,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
'decimo_quarto_ordenacao': 'ocorrencias_sessao.html'
})
html_template = render_to_string('relatorios/relatorio_sessao_plenaria.html', context)
html_template = render_to_string(
'relatorios/relatorio_sessao_plenaria.html', context)
info = "Resumo da {}ª Reunião {} \
da {}ª Sessão Legislativa da {} \
@ -1535,7 +1573,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
"logotipo": casa.logotipo,
"info": info})
pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header)
pdf_file = make_pdf(
base_url=base_url, main_template=html_template, header_template=html_header)
response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
@ -1556,7 +1595,8 @@ def gera_etiqueta_ml(materia_legislativa, base_url):
max_ementa_size = 240
ementa = materia_legislativa.ementa
ementa = ementa if len(ementa) < max_ementa_size else ementa[:max_ementa_size]+"..."
ementa = ementa if len(
ementa) < max_ementa_size else ementa[:max_ementa_size]+"..."
context = {
'numero': materia_legislativa.numero,
@ -1570,10 +1610,12 @@ def gera_etiqueta_ml(materia_legislativa, base_url):
'barcode': barcode
}
main_template = render_to_string('relatorios/etiqueta_materia_legislativa.html', context)
main_template = render_to_string(
'relatorios/etiqueta_materia_legislativa.html', context)
html = HTML(base_url=base_url, string=main_template)
main_doc = html.render(stylesheets=[CSS(string="@page {{size: {}cm {}cm;}}".format(confg.largura,confg.altura))])
main_doc = html.render(stylesheets=[CSS(
string="@page {{size: {}cm {}cm;}}".format(confg.largura, confg.altura))])
pdf_file = main_doc.write_pdf()
return pdf_file

66
sapl/sessao/views.py

@ -86,7 +86,8 @@ def reordena_materias(request, pk, tipo, ordenacao):
"ordemdia": "sapl.sessao:ordemdia_list"
}
materias = TIPOS_MATERIAS[tipo].objects.filter(sessao_plenaria_id=pk).order_by(*TIPOS_ORDENACAO[ordenacao])
materias = TIPOS_MATERIAS[tipo].objects.filter(
sessao_plenaria_id=pk).order_by(*TIPOS_ORDENACAO[ordenacao])
update_list = []
for numero, materia in enumerate(materias, 1):
@ -106,7 +107,8 @@ def verifica_presenca(request, model, spk, is_leitura=False):
else:
text = 'Votação não pode ser aberta sem presenças'
logger.error("user={}. {} (sessao_plenaria_id={}).".format(username,text, spk))
logger.error("user={}. {} (sessao_plenaria_id={}).".format(
username, text, spk))
msg = _(text)
messages.add_message(request, messages.ERROR, msg)
return False
@ -204,7 +206,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
for i, row in enumerate(context['rows']):
materia = context['object_list'][i].materia
obj = context['object_list'][i]
url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id})
url_materia = reverse(
'sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id})
numeracao = materia.numeracao_set.first() if materia.numeracao_set.first() else "-"
autoria = materia.autoria_set.filter(primeiro_autor=True)
autor = ', '.join([str(a.autor) for a in autoria]) if autoria else "-"
@ -239,9 +242,12 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
# url em toda a string de title_materia
context['rows'][i][1] = (title_materia, None)
exist_resultado = obj.registrovotacao_set.filter(materia=obj.materia).exists()
exist_retirada = obj.retiradapauta_set.filter(materia=obj.materia).exists()
exist_leitura = obj.registroleitura_set.filter(materia=obj.materia).exists()
exist_resultado = obj.registrovotacao_set.filter(
materia=obj.materia).exists()
exist_retirada = obj.retiradapauta_set.filter(
materia=obj.materia).exists()
exist_leitura = obj.registroleitura_set.filter(
materia=obj.materia).exists()
if (obj.tipo_votacao != 4 and not exist_resultado and not exist_retirada) or\
(obj.tipo_votacao == 4 and not exist_leitura):
@ -571,7 +577,8 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
TransferenciaMateriasSessaoAbstract, self
).get_context_data(**kwargs)
sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk'])
sessao_plenaria_atual = SessaoPlenaria.objects.get(
pk=self.kwargs['pk'])
context['subnav_template_name'] = 'sessao/subnav.yaml'
context['root_pk'] = self.kwargs['pk']
@ -627,7 +634,7 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
messages.add_message(request, messages.ERROR, msg)
msg_c = _(
'Se o problema persistir, entre em contato com o suporte do ' \
'Se o problema persistir, entre em contato com o suporte do '
'Interlegis.'
)
messages.add_message(request, messages.WARNING, msg_c)
@ -925,7 +932,6 @@ class OradorCrud(MasterDetailCrud):
form_class = OradorForm
template_name = 'sessao/oradores_create.html'
def get_initial(self):
return {'id_sessao': self.kwargs['pk']}
@ -937,7 +943,8 @@ class OradorCrud(MasterDetailCrud):
if tipo_sessao.nome == "Solene":
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = Orador.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
ultimo_orador = Orador.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context
@ -1009,7 +1016,8 @@ class OradorExpedienteCrud(OradorCrud):
if tipo_sessao.nome == "Solene":
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = OradorExpediente.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
ultimo_orador = OradorExpediente.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context
@ -1074,6 +1082,7 @@ class OradorExpedienteCrud(OradorCrud):
class OradorOrdemDiaCrud(OradorCrud):
model = OradorOrdemDia
class CreateView(MasterDetailCrud.CreateView):
form_class = OradorOrdemDiaForm
template_name = 'sessao/oradores_create.html'
@ -1087,7 +1096,8 @@ class OradorOrdemDiaCrud(OradorCrud):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
ultimo_orador = OradorOrdemDia.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
ultimo_orador = OradorOrdemDia.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context
@ -1936,20 +1946,26 @@ def get_materias_expediente(sessao_plenaria):
rv = m.registrovotacao_set.filter(materia=m.materia).first()
rp = m.retiradapauta_set.filter(materia=m.materia).first()
rl = m.registroleitura_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
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else:
resultado = _('Matéria lida') if m.tipo_votacao == 4 else _('Matéria não votada')
resultado = _('Matéria não lida') if m.tipo_votacao == 4 else _(
'Matéria não votada')
resultado_observacao = ''
voto_nominal = []
if m.tipo_votacao == 2:
for voto in VotoParlamentar.objects.filter(expediente=m.id):
voto_nominal.append((voto.parlamentar.nome_completo, voto.voto))
voto_nominal.append(
(voto.parlamentar.nome_completo, voto.voto))
voto = RegistroVotacao.objects.filter(expediente=m.id).last()
if voto:
@ -2061,20 +2077,26 @@ def get_materias_ordem_do_dia(sessao_plenaria):
# Verificar resultado
rv = o.registrovotacao_set.filter(materia=o.materia).first()
rp = o.retiradapauta_set.filter(materia=o.materia).first()
rl = o.registroleitura_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
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else:
resultado = _('Matéria lida') if o.tipo_votacao == 4 else _('Matéria não votada')
resultado = _('Matéria não lida') if o.tipo_votacao == 4 else _(
'Matéria não votada')
resultado_observacao = ''
voto_nominal = []
if o.tipo_votacao == 2:
for voto in VotoParlamentar.objects.filter(ordem=o.id):
voto_nominal.append((voto.parlamentar.nome_completo, voto.voto))
voto_nominal.append(
(voto.parlamentar.nome_completo, voto.voto))
voto = RegistroVotacao.objects.filter(ordem=o.id).last()
if voto:
@ -3435,7 +3457,8 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
self.logger.error("user=" + username + ". " + str(e))
return self.form_invalid(form)
else:
expediente = ExpedienteMateria.objects.get(id=expediente_id)
expediente = ExpedienteMateria.objects.get(
id=expediente_id)
resultado = TipoResultadoVotacao.objects.get(
id=request.POST['resultado_votacao'])
expediente.resultado = resultado.nome
@ -3586,7 +3609,8 @@ class PautaSessaoDetailView(DetailView):
# =====================================================================
# Identificação Básica
abertura = self.object.data_inicio.strftime('%d/%m/%Y')
encerramento = self.object.data_fim.strftime('%d/%m/%Y') if self.object.data_fim else ""
encerramento = self.object.data_fim.strftime(
'%d/%m/%Y') if self.object.data_fim else ""
hora_inicio = self.object.hora_inicio
hora_fim = self.object.hora_fim
@ -3612,7 +3636,8 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada')
resultado_observacao = _(' ')
ultima_tramitacao = m.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first()
ultima_tramitacao = m.materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').first()
numeracao = m.materia.numeracao_set.first()
materias_expediente.append({
@ -3662,7 +3687,8 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada')
resultado_observacao = _(' ')
ultima_tramitacao = o.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first()
ultima_tramitacao = o.materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').first()
numeracao = o.materia.numeracao_set.first()
materias_ordem.append({

Loading…
Cancel
Save