Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

6.7 KiB

Resumo das Alterações

  • Home do Vereador: Novos cards de acesso rápido
  • OnlyOffice: Correções no salvamento de documentos
  • Listagem de Proposições: Nova UI minimalista com status visual
  • Detalhes da Proposição: Layout moderno e intuitivo

1. Tela Home do Vereador

Arquivos Alterados

  • sapl/templates/index.html
  • sapl/base/views.py

Mudanças

Novo card "Matérias Legislativas"

  • Adicionado na seção do vereador (is_parlamentar)
  • Permite pesquisar projetos de lei e proposições
  • Link para /materia/pesquisar-materia

Novo card "Minhas Matérias"

  • Substitui o antigo card "Fluxo de Proposições"
  • Filtra automaticamente as matérias pelo autor logado
  • Permite ao vereador visualizar e assinar documentos de sua autoria

Alteração na View

  • IndexView agora passa autor_id no contexto
  • Usado para filtrar matérias por autor na pesquisa

2. Correções no OnlyOffice

Arquivos Alterados

  • sapl/materia/onlyoffice_views.py
  • sapl/templates/materia/onlyoffice_editor.html
  • sapl/materia/views.py

Problema Resolvido

Ao tentar enviar uma proposição, aparecia o erro:

"Proposição não possui nenhum tipo de Texto associado"

Isso ocorria porque o callback do OnlyOffice não conseguia salvar o documento corretamente.

Soluções Implementadas

1. Correção no Callback

# Antes: só substituía localhost:8001
if 'localhost:8001' in download_url:
    download_url = download_url.replace('localhost:8001', 'onlyoffice:80')

# Depois: substitui qualquer URL externa
download_url = re.sub(r'https?://[^/]+', 'http://onlyoffice:80', download_url)

2. Botão "Salvar e Voltar" no Editor

  • Força o fechamento do editor (triggering callback)
  • Aguarda 3 segundos para o callback processar
  • Redireciona para a página de detalhes

3. Mensagem de Erro Melhorada

  • Orienta o usuário a usar o OnlyOffice
  • Explica como salvar o documento antes de enviar

4. Aviso no Template de Detalhes

  • Alerta quando a proposição não tem texto
  • Instrui o usuário a criar o documento

3. Listagem de Proposições (/proposicao/)

Arquivos Alterados

  • sapl/templates/materia/proposicao_list.html
  • sapl/materia/views.py

Nova Interface

Design Minimalista

  • Layout limpo com max-width de 900px
  • Cards com bordas sutis ao invés de sombras pesadas
  • Tipografia clara e espaçamento consistente

Header com Estatísticas

Proposições                    5 total  2 em elaboração  1 enviadas

Cards de Proposição Cada card mostra:

  • Tipo (ex: Requerimento)
  • Status com badge colorido
  • Data de envio
  • Ementa (truncada em 40 palavras)
  • Alerta de devolução (se aplicável)
  • Links: Abrir / Editar

Status com Cores

Status Cor Descrição
Em Elaboração Cinza Proposição ainda não enviada
Aguardando Azul Enviada, aguardando recebimento
Incorporada Verde Recebida pela Mesa
Devolvida Laranja Devolvida com justificativa
Cancelada Cinza escuro Proposição cancelada

Paginação

  • 10 itens por página
  • Navegação: Anterior / Números / Próxima
  • Indicador "Página X de Y"

Código da View

class ListView(Crud.ListView):
    paginate_by = 10

    def get_context_data(self, **kwargs):
        # Estatísticas
        context['stats'] = {
            'total': qs.count(),
            'elaboracao': qs.filter(data_envio__isnull=True).count(),
            # ...
        }

        # Lista processada com status
        for obj in page_obj.object_list:
            if obj.cancelado:
                status = 'cancelada'
            elif obj.data_devolucao:
                status = 'devolvida'
            # ...

        # Paginação
        context['is_paginated'] = paginator.num_pages > 1
        context['page_obj'] = page_obj
        context['page_range'] = make_pagination(...)

4. Detalhes da Proposição (/proposicao/{id})

Arquivos Alterados

  • sapl/templates/materia/proposicao_detail.html

Nova Interface

Header

  • Link "Voltar para lista"
  • Título: Tipo + Número/Ano ou "Rascunho"
  • Badge de status colorido

Alertas Contextuais

  • Vermelho: Proposição devolvida (mostra justificativa)
  • Azul: Aguardando recebimento
  • Amarelo: Documento não criado

Barra de Ações Muda conforme o estado da proposição:

Em Elaboração:

  • Editar Documento (OnlyOffice)
  • Enviar Proposição (se tem texto)
  • Editar Dados
  • Excluir

Enviada:

  • Ver Recibo
  • Retornar Proposição (se não recebida)
  • Baixar Documento

Seções de Conteúdo

  1. Ementa - Texto descritivo em destaque

  2. Informações - Grid com:

    • Tipo
    • Número
    • Data de Envio
    • Data de Recebimento
    • Data de Devolução
    • Status do Documento (Criado/Não criado)
  3. Observação - Se houver

  4. Vínculos - Links para:

    • Matéria gerada
    • Matéria anexadora
  5. Info do Sistema (só admin) - Usuário, IP, Última edição, Hash

Página de Acesso Negado

  • Ícone de cadeado
  • Mensagem clara
  • Botão para voltar à lista

Fluxo do Vereador

1. Acessar Home
   └── Card "Proposições" → Criar / Listar

2. Criar Proposição
   └── Preencher tipo e ementa
   └── Redirecionado para OnlyOffice

3. Editar Documento (OnlyOffice)
   └── Escrever texto da proposição
   └── Clicar "Salvar e Voltar"

4. Enviar Proposição
   └── Verificar dados
   └── Clicar "Enviar Proposição"
   └── Aguardar recebimento

5. Acompanhar Status
   └── Listagem mostra status atual
   └── Ver detalhes para mais informações
   └── Se devolvida, ver justificativa e corrigir

Considerações Técnicas

Compatibilidade Docker

O OnlyOffice roda em container separado. As URLs são convertidas:

  • Browser → OnlyOffice: localhost:8001
  • SAPL → OnlyOffice: onlyoffice:80
  • OnlyOffice → SAPL: sapl-dev:8000

Paginação

Usa a função make_pagination do CRUD base para gerar o range de páginas com reticências.

CSS

Estilos inline no template usando o bloco webpack_loader_chunks_css para evitar conflitos com o CSS global.


Arquivos Modificados (Resumo)

sapl/
├── base/
│   └── views.py                    # IndexView com autor_id
├── materia/
│   ├── views.py                    # ListView e mensagens de erro
│   └── onlyoffice_views.py         # Correção do callback
└── templates/
    ├── index.html                  # Cards do vereador
    └── materia/
        ├── proposicao_list.html    # Nova listagem
        ├── proposicao_detail.html  # Novos detalhes
        └── onlyoffice_editor.html  # Botão salvar e voltar