From aa513ef68711b40e6ba2d27d3750c049a3c8e7e7 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 6 Aug 2026 02:00:08 -0300 Subject: [PATCH] =?UTF-8?q?Feat(Proposicao):=20Of=C3=ADcio=20j=C3=A1=20nas?= =?UTF-8?q?ce=20marcado=20como=20documento=20de=20gabinete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Evita depender de alguém lembrar de marcar a caixa em Tabelas Auxiliares depois do deploy: a migration de dados marca dispensa_protocolo no tipo de proposição "Ofício" que já existir no banco. A comparação normaliza acentos, espaços e caixa, porque a descrição é digitada em cada Casa e aparece como "Ofício", "OFICIO" ou "oficio". Casas que não têm esse tipo cadastrado não são afetadas. A migration é reversível: o reverse desmarca os mesmos tipos. Co-Authored-By: Claude Opus 5 --- ...98_marca_oficio_como_documento_gabinete.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 sapl/materia/migrations/0098_marca_oficio_como_documento_gabinete.py diff --git a/sapl/materia/migrations/0098_marca_oficio_como_documento_gabinete.py b/sapl/materia/migrations/0098_marca_oficio_como_documento_gabinete.py new file mode 100644 index 000000000..7f8da558b --- /dev/null +++ b/sapl/materia/migrations/0098_marca_oficio_como_documento_gabinete.py @@ -0,0 +1,46 @@ +import unicodedata + +from django.db import migrations + + +# Tipos de proposição que já nascem como documento de gabinete, sem +# necessidade de configuração manual em Tabelas Auxiliares. +DESCRICOES_GABINETE = {'oficio'} + + +def _normalizar(descricao): + """Remove acentos, espaços das pontas e caixa, para comparar descrições. + + A descrição é digitada pelo usuário em cada Casa, então aparece como + 'Ofício', 'OFICIO', 'oficio' etc. + """ + texto = unicodedata.normalize('NFKD', descricao or '') + texto = ''.join(c for c in texto if not unicodedata.combining(c)) + return texto.strip().lower() + + +def _aplicar(apps, valor): + TipoProposicao = apps.get_model('materia', 'TipoProposicao') + for tipo in TipoProposicao.objects.all(): + if _normalizar(tipo.descricao) in DESCRICOES_GABINETE: + tipo.dispensa_protocolo = valor + tipo.save(update_fields=['dispensa_protocolo']) + + +def marcar(apps, schema_editor): + _aplicar(apps, True) + + +def desmarcar(apps, schema_editor): + _aplicar(apps, False) + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0097_add_dispensa_protocolo_tipoproposicao'), + ] + + operations = [ + migrations.RunPython(marcar, desmarcar), + ]