diff --git a/sigi/apps/casas/admin.py b/sigi/apps/casas/admin.py
index 1f6f4d1..ace3625 100644
--- a/sigi/apps/casas/admin.py
+++ b/sigi/apps/casas/admin.py
@@ -293,51 +293,16 @@ class ServicoInline(admin.TabularInline):
model = Servico
fields = (
"tipo_servico",
- "link_url",
+ "url",
"hospedagem_interlegis",
"data_ativacao",
"data_alteracao",
"data_desativacao",
- "link_servico",
+ "motivo_desativacao",
)
- readonly_fields = [
- "tipo_servico",
- "link_url",
- "hospedagem_interlegis",
- "data_ativacao",
- "data_alteracao",
- "data_desativacao",
- "link_servico",
- ]
- extra = 0
- max_num = 0
- can_delete = False
- ordering = ("-data_alteracao",)
-
- def link_url(self, servico):
- if servico.data_desativacao is not None:
- return servico.url
- return mark_safe(
- f'{servico.url}'
- )
-
- link_url.short_description = _("URL do serviço")
-
- def link_servico(self, obj):
- if obj.pk is None:
- return ""
- opts = self.opts
- url = reverse(
- f"admin:{opts.app_label}_{opts.model_name}_change", args=[obj.pk]
- )
- return mark_safe(
- f'edit'
- )
-
- link_servico.short_description = _("Editar Serviço")
-
- def has_add_permission(self, request, obj):
- return False
+ readonly_fields = ["data_alteracao"]
+ extra = 1
+ ordering = ("tipo_servico", "-data_alteracao")
class OcorrenciaInline(admin.TabularInline):
diff --git a/sigi/apps/casas/models.py b/sigi/apps/casas/models.py
index cedca2f..45d9799 100644
--- a/sigi/apps/casas/models.py
+++ b/sigi/apps/casas/models.py
@@ -183,115 +183,6 @@ class Orgao(models.Model):
except Funcionario.DoesNotExist:
return None
- def gerarCodigoInterlegis(self):
- codigo = self.codigo_interlegis
-
- if codigo == "":
- if self.tipo.sigla == "AL": # Assembléias são tratadas a parte
- codigo = "A" + self.municipio.uf.sigla
- if Orgao.objects.filter(codigo_interlegis=codigo).count() <= 0:
- # Só grava o código se ele for inédito
- self.codigo_interlegis = codigo
- self.save()
- return codigo
- # Se já existe, então trata a Assembleia como uma Casa qualquer.
-
- cityName = normalize("NFKD", self.municipio.nome).encode(
- "ascii", "ignore"
- )
- cityName = cityName.upper().strip()
- cityName = cityName.replace(" DA ", " ")
- cityName = cityName.replace(" DE ", " ")
- cityName = cityName.replace(" DO ", " ")
- cityName = filter(lambda x: x in ascii_uppercase + " ", cityName)
-
- # estratégia 1 - Pegar as 1ª letra de cada nome da cidade
- codigo = "".join([x[0] for x in cityName.split(" ")[:3]])
-
- # Se o código ficou com menos que três letras, pegar as 2 primeiras
- if len(codigo) < 3:
- codigo = "".join([x[0:2] for x in cityName.split(" ")[:3]])[:3]
-
- # Se ainda ficou com menos de três letras, então o nome da cidade só
- # tem uma palavra. Pegue as três primeiras letras da palavra
- if len(codigo) < 3:
- codigo = cityName[:3]
-
- # Se o código já existir, substituir a última letra do código pela
- # última letra do nome da cidade, e ir recuando, letra a letra,
- # até achar um novo código.
-
- cityName = cityName.replace(" ", "")
- ultima = len(cityName)
-
- while (
- Orgao.objects.filter(codigo_interlegis=codigo).count() > 0
- and ultima > 0
- ):
- codigo = codigo[:2] + cityName[ultima - 1 : ultima]
- ultima -= 1
-
- # Se usou todas as letras do nome na última posição e ainda assim
- # não gerou um código único, então vamos compor o nome usando as
- # três primeiras consoantes.
-
- if Orgao.objects.filter(codigo_interlegis=codigo).count() > 0:
- codigo_cons = (
- cityName.replace("A", "")
- .replace("E", "")
- .replace("I", "")
- .replace("O", "")
- .replace("", "")[:3]
- )
- if (
- len(codigo_cons) == 3
- and Orgao.objects.filter(codigo_interlegis=codigo).count()
- > 0
- ):
- codigo = codigo_cons
-
- # Se ainda não gerou um nome único, vamos colocar dígitos no
- # último caractere, de A a Z
-
- i = "A"
-
- while (
- Orgao.objects.filter(codigo_interlegis=codigo).count() > 0
- and i <= "Z"
- ):
- codigo = codigo[:2] + str(i)
- i = chr(ord(i) + 1)
-
- # Se não encontrou, comece a gerar strings com 3 letras aleatórias
- # tiradas do nome da cidade, até gerar uma que não existe. Tentar
- # 100 vezes apenas
-
- i = 0
-
- while (
- Orgao.objects.filter(codigo_interlegis=codigo).count() > 0
- and i < 100
- ):
- codigo = (
- random.choice(cityName)
- + random.choice(cityName)
- + random.choice(cityName)
- )
- i += 1
-
- # Caramba! Só resta então gerar o código com 3 letras aleatórias
- # quaisquer do alfabeto!
-
- i = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
- while Orgao.objects.filter(codigo_interlegis=codigo).count() > 0:
- codigo = random.choice(i) + random.choice(i) + random.choice(i)
-
- self.codigo_interlegis = codigo
- self.save()
-
- return codigo
-
def __str__(self):
return self.nome
diff --git a/sigi/apps/servicos/admin.py b/sigi/apps/servicos/admin.py
index 969bb2b..0234a15 100644
--- a/sigi/apps/servicos/admin.py
+++ b/sigi/apps/servicos/admin.py
@@ -5,16 +5,9 @@ from django.utils.safestring import mark_safe
from django.http import Http404, HttpResponseRedirect
from django.utils.translation import gettext as _
from import_export.fields import Field
-from sigi.apps.casas.admin import FuncionariosInline, GerentesInterlegisFilter
-from sigi.apps.casas.models import Orgao
-from sigi.apps.servicos.models import (
- Servico,
- LogServico,
- CasaAtendida,
- TipoServico,
-)
+from sigi.apps.casas.admin import GerentesInterlegisFilter
+from sigi.apps.servicos.models import Servico, LogServico, TipoServico
from sigi.apps.servicos.filters import ServicoAtivoFilter, DataUtimoUsoFilter
-from sigi.apps.servicos.forms import ServicoFormAdmin
from sigi.apps.utils.filters import DateRangeFilter
from sigi.apps.utils.mixins import CartExportMixin, LabeledResourse
@@ -31,9 +24,6 @@ class ServicoExportResourse(LabeledResourse):
"casa_legislativa__municipio__uf__sigla",
"casa_legislativa__email",
"telefone_casa",
- "contato_tecnico__nome",
- "contato_tecnico__email",
- "contato_tecnico__nota",
"tipo_servico__nome",
"url",
"hospedagem_interlegis",
@@ -61,21 +51,6 @@ class LogServicoInline(admin.StackedInline):
extra = 1
-class ContatosInline(FuncionariosInline):
- can_delete = False # Equipe do SEIT não pode excluir pessoas de contato
- # SEIT see all contacts, including President
- def get_queryset(self, request):
- return self.model.objects.all()
-
- def get_queryset(self, request):
- return (
- self.model.objects.exclude(desativado=True)
- .extra(select={"ult_null": "ult_alteracao is null"})
- .order_by("ult_null", "-ult_alteracao")
- # A função extra foi usada para quando existir um registro com o campo igual a null não aparecer na frente dos mais novos
- )
-
-
@admin.register(TipoServico)
class TipoServicoAdmin(admin.ModelAdmin):
list_display = (
@@ -89,15 +64,13 @@ class TipoServicoAdmin(admin.ModelAdmin):
@admin.register(Servico)
class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
- form = ServicoFormAdmin
actions = [
"calcular_data_uso",
]
list_display = (
+ "tipo_servico",
"casa_legislativa",
- "get_codigo_interlegis",
"get_uf",
- "tipo_servico",
"hospedagem_interlegis",
"data_ativacao",
"data_desativacao",
@@ -105,47 +78,17 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
"data_ultimo_uso",
"get_link_erro",
)
- fieldsets = (
- (
- None,
- {
- "fields": (
- "casa_legislativa",
- "data_ativacao",
- )
- },
- ),
- (
- _("Serviço"),
- {
- "fields": (
- "tipo_servico",
- ("url", "hospedagem_interlegis"),
- ("nome_servidor", "porta_servico", "senha_inicial"),
- )
- },
- ),
- (
- _("Contatos"),
- {
- "fields": (
- "contato_tecnico",
- "contato_administrativo",
- )
- },
- ),
- (
- _("Alterações"),
- {
- "fields": (
- "data_alteracao",
- "data_desativacao",
- "motivo_desativacao",
- )
- },
- ),
- )
- readonly_fields = ("casa_legislativa", "data_ativacao", "data_alteracao")
+ fields = [
+ "casa_legislativa",
+ "tipo_servico",
+ "url",
+ "hospedagem_interlegis",
+ "data_ativacao",
+ "data_alteracao",
+ "data_desativacao",
+ "motivo_desativacao",
+ ]
+ readonly_fields = ["data_alteracao"]
list_filter = (
"tipo_servico",
"hospedagem_interlegis",
@@ -155,7 +98,6 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter),
"casa_legislativa__municipio__uf",
)
- list_display_links = []
ordering = (
"casa_legislativa__municipio__uf",
"casa_legislativa",
@@ -165,14 +107,6 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
search_fields = ("casa_legislativa__search_text",)
resource_class = ServicoExportResourse
- def get_codigo_interlegis(self, obj):
- return obj.casa_legislativa.codigo_interlegis
-
- get_codigo_interlegis.short_description = _("Código Interlegis")
- get_codigo_interlegis.admin_order_field = (
- "casa_legislativa__codigo_interlegis"
- )
-
def get_uf(self, obj):
return "%s" % (obj.casa_legislativa.municipio.uf)
@@ -225,87 +159,6 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
"casa_legislativa__municipio__uf__codigo_ibge__exact",
]
- def add_view(self, request, form_url="", extra_context=None):
- id_casa = request.GET.get("id_casa", None)
-
- if not id_casa:
- raise Http404
-
- return super(ServicoAdmin, self).add_view(
- request, form_url, extra_context=extra_context
- )
-
- def response_add(self, request, obj):
- opts = obj._meta
- msg = _('The %(name)s "%(obj)s" was added successfully.') % {
- "name": force_str(opts.verbose_name),
- "obj": force_str(obj),
- }
-
- if "_addanother" in request.POST:
- self.message_user(
- request,
- msg
- + " "
- + (
- _("You may add another %s below.")
- % force_str(opts.verbose_name)
- ),
- )
- return HttpResponseRedirect(
- request.path + "?id_casa=%s" % (obj.casa_legislativa.id,)
- )
- elif "_save" in request.POST:
- self.message_user(request, msg)
- return HttpResponseRedirect(
- reverse(
- "admin:servicos_casaatendida_change",
- args=[obj.casa_legislativa.id],
- )
- )
-
- return super(ServicoAdmin, self).response_add(request, obj)
-
- def response_change(self, request, obj):
- opts = obj._meta
- msg = _('The %(name)s "%(obj)s" was changed successfully.') % {
- "name": force_str(opts.verbose_name),
- "obj": force_str(obj),
- }
-
- if "_addanother" in request.POST:
- self.message_user(
- request,
- msg
- + " "
- + (
- _("You may add another %s below.")
- % force_str(opts.verbose_name)
- ),
- )
- return HttpResponseRedirect(
- "../add/?id_casa=%s" % (obj.casa_legislativa.id,)
- )
- elif "_save" in request.POST:
- self.message_user(request, msg)
- return HttpResponseRedirect(
- reverse(
- "admin:servicos_casaatendida_change",
- args=[obj.casa_legislativa.id],
- )
- )
-
- return super(ServicoAdmin, self).response_change(request, obj)
-
- def save_form(self, request, form, change):
- obj = super(ServicoAdmin, self).save_form(request, form, change)
- if not change:
- id_casa = request.GET.get("id_casa", None)
- if not id_casa:
- raise Http404
- obj.casa_legislativa = Orgao.objects.get(pk=id_casa)
- return obj
-
def changelist_view(self, request, extra_context=None):
from sigi.apps.convenios.views import normaliza_data
@@ -318,83 +171,3 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
request,
extra_context={"query_str": "?" + request.META["QUERY_STRING"]},
)
-
-
-@admin.register(CasaAtendida)
-class CasaAtendidaAdmin(admin.ModelAdmin):
- actions = None
- list_display = (
- "codigo_interlegis",
- "nome",
- "get_servicos",
- )
- ordering = ["nome"]
- fieldsets = (
- (
- "Casa Legislativa",
- {
- "fields": (
- ("codigo_interlegis", "nome"),
- ("logradouro", "bairro", "municipio", "cep"),
- ("email", "pagina_web"),
- )
- },
- ),
- )
- readonly_fields = ("nome", "logradouro", "bairro", "municipio", "cep")
- inlines = (ContatosInline,)
- list_filter = (
- "tipo",
- "servico__tipo_servico",
- "municipio__uf__nome",
- "servico__casa_legislativa__convenio__projeto",
- )
- search_fields = (
- "search_text",
- "cnpj",
- "bairro",
- "logradouro",
- "cep",
- "municipio__nome",
- "municipio__uf__nome",
- "municipio__codigo_ibge",
- "pagina_web",
- "observacoes",
- )
-
- def get_servicos(self, obj):
- result = [
- f"{servico.tipo_servico.nome} ({servico.status_servico}). "
- f"Contato: {servico.contato_administrativo.nome}"
- for servico in obj.servico_set.all()
- ]
-
- return mark_safe("
")
-
- get_servicos.short_description = _("Serviços")
-
- def lookup_allowed(self, lookup, value):
- return super(CasaAtendidaAdmin, self).lookup_allowed(
- lookup, value
- ) or lookup in [
- "municipio__uf__codigo_ibge__exact",
- "servico__tipo_servico__id__exact",
- ]
-
- def change_view(self, request, object_id, extra_context=None):
- # Se a Casa ainda não é atendida, gerar o código interlegis para ela
- # Assim ela passa a ser uma casa atendida
- casa = Orgao.objects.get(id=object_id)
-
- if casa.codigo_interlegis == "":
- casa.gerarCodigoInterlegis()
-
- return super(CasaAtendidaAdmin, self).change_view(
- request, object_id, extra_context=extra_context
- )
-
- def has_add_permission(self, request):
- return False # Nunca é permitido inserir uma nova Casa Legislativa por aqui
-
- def has_delete_permission(self, request, obj=None):
- return False # Nunca deletar casas por aqui
diff --git a/sigi/apps/servicos/forms.py b/sigi/apps/servicos/forms.py
deleted file mode 100644
index 18c6a09..0000000
--- a/sigi/apps/servicos/forms.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from django.forms.models import ModelForm
-from django.utils.encoding import force_str
-from sigi.apps.servicos.models import Servico, CasaAtendida
-
-
-class ServicoFormAdmin(ModelForm):
- class Meta:
- model = Servico
- fields = "__all__"
-
- def __init__(self, *args, **kwargs):
- super(ServicoFormAdmin, self).__init__(*args, **kwargs)
-
- self.fields["contato_tecnico"].choices = ()
- self.fields["contato_administrativo"].choices = ()
-
- if self.instance.casa_legislativa_id:
- id_casa = self.instance.casa_legislativa_id
- elif "initial" in kwargs and "id_casa" in kwargs["initial"]:
- id_casa = kwargs["initial"]["id_casa"]
- self.instance.casa_legislativa_id = id_casa
- else:
- id_casa = None
-
- if id_casa:
- casa = CasaAtendida.objects.get(pk=id_casa)
- contatos = [
- (f.id, force_str(f)) for f in casa.funcionario_set.all()
- ]
- self.fields["contato_tecnico"].choices = contatos
- self.fields["contato_administrativo"].choices = contatos
diff --git a/sigi/apps/servicos/migrations/0010_delete_casaatendida_alter_tiposervico_options_and_more.py b/sigi/apps/servicos/migrations/0010_delete_casaatendida_alter_tiposervico_options_and_more.py
new file mode 100644
index 0000000..69b5bdb
--- /dev/null
+++ b/sigi/apps/servicos/migrations/0010_delete_casaatendida_alter_tiposervico_options_and_more.py
@@ -0,0 +1,41 @@
+# Generated by Django 4.0.4 on 2022-05-16 15:22
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('servicos', '0009_alter_casamanifesta_email_alter_casamanifesta_id_and_more'),
+ ]
+
+ operations = [
+ migrations.DeleteModel(
+ name='CasaAtendida',
+ ),
+ migrations.AlterModelOptions(
+ name='tiposervico',
+ options={'verbose_name': 'tipo de serviço', 'verbose_name_plural': 'tipos de serviço'},
+ ),
+ migrations.AlterField(
+ model_name='servico',
+ name='tipo_servico',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='servicos.tiposervico', verbose_name='tipo de serviço'),
+ ),
+ migrations.AlterField(
+ model_name='tiposervico',
+ name='template_email_altera',
+ field=models.TextField(blank=True, help_text='Use:
\n {url} para incluir a URL do serviço,
\n {senha} para incluir a senha inicial do serviço', verbose_name='template de email de alteração'),
+ ),
+ migrations.AlterField(
+ model_name='tiposervico',
+ name='template_email_ativa',
+ field=models.TextField(blank=True, help_text='Use:
\n {url} para incluir a URL do serviço,
\n {senha} para incluir a senha inicial do serviço', verbose_name='template de email de ativação'),
+ ),
+ migrations.AlterField(
+ model_name='tiposervico',
+ name='template_email_desativa',
+ field=models.TextField(blank=True, help_text='Use:
\n {url} para incluir a URL do serviço,
\n {senha} para incluir a senha inicial do serviço
{motivo} para incluir o motivo da desativação do serviço', verbose_name='template de email de desativação'),
+ ),
+ ]
diff --git a/sigi/apps/servicos/migrations/0011_remove_servico_contato_administrativo_and_more.py b/sigi/apps/servicos/migrations/0011_remove_servico_contato_administrativo_and_more.py
new file mode 100644
index 0000000..88b9c3f
--- /dev/null
+++ b/sigi/apps/servicos/migrations/0011_remove_servico_contato_administrativo_and_more.py
@@ -0,0 +1,48 @@
+# Generated by Django 4.0.4 on 2022-05-16 18:36
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('servicos', '0010_delete_casaatendida_alter_tiposervico_options_and_more'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='servico',
+ name='contato_administrativo',
+ ),
+ migrations.RemoveField(
+ model_name='servico',
+ name='contato_tecnico',
+ ),
+ migrations.RemoveField(
+ model_name='servico',
+ name='nome_servidor',
+ ),
+ migrations.RemoveField(
+ model_name='servico',
+ name='porta_servico',
+ ),
+ migrations.RemoveField(
+ model_name='servico',
+ name='senha_inicial',
+ ),
+ migrations.AlterField(
+ model_name='tiposervico',
+ name='template_email_altera',
+ field=models.TextField(blank=True, help_text='Use a marcação {url} para incluir a URL do serviço,
', verbose_name='template de email de alteração'),
+ ),
+ migrations.AlterField(
+ model_name='tiposervico',
+ name='template_email_ativa',
+ field=models.TextField(blank=True, help_text='Use a marcação {url} para incluir a URL do serviço,
', verbose_name='template de email de ativação'),
+ ),
+ migrations.AlterField(
+ model_name='tiposervico',
+ name='template_email_desativa',
+ field=models.TextField(blank=True, help_text='Use a marcação {url} para incluir a URL do serviço,
{motivo} para incluir o motivo da desativação do serviço', verbose_name='template de email de desativação'),
+ ),
+ ]
diff --git a/sigi/apps/servicos/models.py b/sigi/apps/servicos/models.py
index bbe5c82..a9811b0 100644
--- a/sigi/apps/servicos/models.py
+++ b/sigi/apps/servicos/models.py
@@ -6,9 +6,7 @@ from django.utils.translation import gettext as _
class TipoServico(models.Model):
MODO_CHOICES = (("H", _("Hospedagem")), ("R", _("Registro")))
- email_help = """Use:
- {url} para incluir a URL do serviço,
- {senha} para incluir a senha inicial do serviço"""
+ email_help = "Use a marcação {url} para incluir a URL do serviço,
"
string_pesquisa_help = (
"Parâmetros da pesquisa para averiguar a data da "
"última atualização do serviço. Formato:
"
@@ -24,13 +22,13 @@ class TipoServico(models.Model):
_("string de pesquisa"), blank=True, help_text=string_pesquisa_help
)
template_email_ativa = models.TextField(
- _("Template de email de ativação"), help_text=email_help, blank=True
+ _("template de email de ativação"), help_text=email_help, blank=True
)
template_email_altera = models.TextField(
- _("Template de email de alteração"), help_text=email_help, blank=True
+ _("template de email de alteração"), help_text=email_help, blank=True
)
template_email_desativa = models.TextField(
- _("Template de email de desativação"),
+ _("template de email de desativação"),
help_text=email_help
+ _("
{motivo} para incluir o motivo da desativação do serviço"),
blank=True,
@@ -42,8 +40,8 @@ class TipoServico(models.Model):
return self.servico_set.filter(data_desativacao=None).count()
class Meta:
- verbose_name = _("Tipo de serviço")
- verbose_name_plural = _("Tipos de serviço")
+ verbose_name = _("tipo de serviço")
+ verbose_name_plural = _("tipos de serviço")
def __str__(self):
return self.nome
@@ -54,39 +52,12 @@ class Servico(models.Model):
Orgao, on_delete=models.PROTECT, verbose_name=_("Casa Legislativa")
)
tipo_servico = models.ForeignKey(
- TipoServico, on_delete=models.PROTECT, verbose_name=_("Tipo de serviço")
- )
- contato_tecnico = models.ForeignKey(
- Funcionario,
- on_delete=models.PROTECT,
- verbose_name=_("Contato técnico"),
- related_name="contato_tecnico",
- )
- contato_administrativo = models.ForeignKey(
- Funcionario,
- on_delete=models.PROTECT,
- verbose_name=_("Contato administrativo"),
- related_name="contato_administrativo",
+ TipoServico, on_delete=models.PROTECT, verbose_name=_("tipo de serviço")
)
url = models.URLField(_("URL do serviço"), blank=True)
hospedagem_interlegis = models.BooleanField(
_("Hospedagem no Interlegis?"), default=False
)
- nome_servidor = models.CharField(
- _("Hospedado em"),
- max_length=60,
- blank=True,
- help_text=_(
- "Se hospedado no Interlegis, informe o nome do servidor."
- "
Senão, informe o nome do provedor de serviços."
- ),
- )
- porta_servico = models.PositiveSmallIntegerField(
- _("Porta de serviço (instância)"), blank=True, null=True
- )
- senha_inicial = models.CharField(
- _("Senha inicial"), max_length=33, blank=True
- )
data_ativacao = models.DateField(_("Data de ativação"), default=date.today)
data_alteracao = models.DateField(
_("Data da última alteração"), blank=True, null=True, auto_now=True
@@ -285,10 +256,7 @@ class Servico(models.Model):
body = self.tipo_servico.template_email_desativa
elif (
self.tipo_servico != original.tipo_servico
- or self.contato_tecnico != original.contato_tecnico
or self.url != original.url
- or self.nome_servidor != original.nome_servidor
- or self.senha_inicial != original.senha_inicial
):
# Serviço foi alterado
subject = _("INTERLEGIS - Alteração de serviço %s") % (
@@ -301,10 +269,8 @@ class Servico(models.Model):
return # sem enviar email
# Prepara e envia o email
- body = (
- body.replace("{url}", self.url)
- .replace("{senha}", self.senha_inicial)
- .replace("{motivo}", self.motivo_desativacao)
+ body = body.replace("{url}", self.url).replace(
+ "{motivo}", self.motivo_desativacao
)
# send_mail(subject, body, DEFAULT_FROM_EMAIL, \
@@ -332,21 +298,6 @@ class LogServico(models.Model):
verbose_name_plural = _("Logs do serviço")
-class CasaAtendidaManager(models.Manager):
- def get_queryset(self):
- qs = super(CasaAtendidaManager, self).get_queryset()
- qs = qs.exclude(codigo_interlegis="")
- return qs
-
-
-class CasaAtendida(Orgao):
- class Meta:
- proxy = True
- verbose_name_plural = _("Casas atendidas")
-
- objects = CasaAtendidaManager()
-
-
class CasaManifesta(models.Model):
casa_legislativa = models.OneToOneField(Orgao, on_delete=models.CASCADE)
data_manifestacao = models.DateTimeField(auto_now_add=True)
diff --git a/sigi/menu_conf.yaml b/sigi/menu_conf.yaml
index 6fba376..d76b6c5 100644
--- a/sigi/menu_conf.yaml
+++ b/sigi/menu_conf.yaml
@@ -2,116 +2,114 @@ admin_menu:
- title: Superusuários
icon: settings
children:
- - title: Usuários
- view_name: admin:auth_user_changelist
- - title: Grupos
- view_name: admin:auth_group_changelist
- - title: Importar Gescon
- view_name: importar-gescon
+ - title: Usuários
+ view_name: admin:auth_user_changelist
+ - title: Grupos
+ view_name: admin:auth_group_changelist
+ - title: Importar Gescon
+ view_name: importar-gescon
main_menu:
- title: Municípios
icon: location_city
children:
- - title: Municípios
- view_name: admin:contatos_municipio_changelist
- - title: Unidades Federativas
- view_name: admin:contatos_unidadefederativa_changelist
- - title: Mesorregiões
- view_name: admin:contatos_mesorregiao_changelist
+ - title: Municípios
+ view_name: admin:contatos_municipio_changelist
+ - title: Unidades Federativas
+ view_name: admin:contatos_unidadefederativa_changelist
+ - title: Mesorregiões
+ view_name: admin:contatos_mesorregiao_changelist
- title: Casas e órgãos
icon: account_balance
children:
- - title: Todo legislativo
- view_name: admin:casas_orgao_changelist
- querystr: tipo__legislativo__exact=1
- - title: Câmaras Municipais
- view_name: admin:casas_orgao_changelist
- querystr: tipo__sigla__exact=CM
- - title: Assembléias Legislativas
- view_name: admin:casas_orgao_changelist
- querystr: tipo__sigla__exact=AL
- - title: Demais órgãos
- view_name: admin:casas_orgao_changelist
- querystr: tipo__legislativo__exact=0
+ - title: Todo legislativo
+ view_name: admin:casas_orgao_changelist
+ querystr: tipo__legislativo__exact=1
+ - title: Câmaras Municipais
+ view_name: admin:casas_orgao_changelist
+ querystr: tipo__sigla__exact=CM
+ - title: Assembléias Legislativas
+ view_name: admin:casas_orgao_changelist
+ querystr: tipo__sigla__exact=AL
+ - title: Demais órgãos
+ view_name: admin:casas_orgao_changelist
+ querystr: tipo__legislativo__exact=0
- title: Gerência Interlegis
icon: people
children:
- - title: Carteira de relacionamentos
- view_name:
- - title: Organizar relacionamentos
- view_name:
- - title: Lista de gerentes
- view_name:
+ - title: Carteira de relacionamentos
+ view_name:
+ - title: Organizar relacionamentos
+ view_name:
+ - title: Lista de gerentes
+ view_name:
- title: Convênios
icon: assignment
children:
- - title: Convênios
- view_name: admin:convenios_convenio_changelist
+ - title: Convênios
+ view_name: admin:convenios_convenio_changelist
- title: Serviços SEIT
icon: cloud_done
children:
- - title: Casas atendidas
- view_name: admin:servicos_casaatendida_changelist
- - title: Lista de serviços
- view_name: admin:servicos_servico_changelist
+ - title: Lista de serviços
+ view_name: admin:servicos_servico_changelist
- title: Ocorrências
icon: comment
children:
- - title: Painel de ocorrências
- view_name: painel-ocorrencias
- - title: Registro de ocorrências
- view_name: admin:ocorrencias_ocorrencia_changelist
- querystr: minhas=S&status__in=1,2
+ - title: Painel de ocorrências
+ view_name: painel-ocorrencias
+ - title: Registro de ocorrências
+ view_name: admin:ocorrencias_ocorrencia_changelist
+ querystr: minhas=S&status__in=1,2
- title: Eventos
icon: school
children:
- - title: Todos os eventos
- view_name: admin:eventos_evento_changelist
- - title: Cursos
- view_name: admin:eventos_evento_changelist
- querystr: tipo_evento__categoria__exact=C
- - title: Encontros
- view_name: admin:eventos_evento_changelist
- querystr: tipo_evento__categoria__exact=E
- - title: Oficinas
- view_name: admin:eventos_evento_changelist
- querystr: tipo_evento__categoria__exact=O
- - title: Seminários
- view_name: admin:eventos_evento_changelist
- querystr: tipo_evento__categoria__exact=S
- - title: Visitas Interlegis
- view_name: admin:eventos_evento_changelist
- querystr: tipo_evento__categoria__exact=V
- - title: Calendário mensal
- view_name:
- - title: Alocação de equipe
- view_name:
+ - title: Todos os eventos
+ view_name: admin:eventos_evento_changelist
+ - title: Cursos
+ view_name: admin:eventos_evento_changelist
+ querystr: tipo_evento__categoria__exact=C
+ - title: Encontros
+ view_name: admin:eventos_evento_changelist
+ querystr: tipo_evento__categoria__exact=E
+ - title: Oficinas
+ view_name: admin:eventos_evento_changelist
+ querystr: tipo_evento__categoria__exact=O
+ - title: Seminários
+ view_name: admin:eventos_evento_changelist
+ querystr: tipo_evento__categoria__exact=S
+ - title: Visitas Interlegis
+ view_name: admin:eventos_evento_changelist
+ querystr: tipo_evento__categoria__exact=V
+ - title: Calendário mensal
+ view_name:
+ - title: Alocação de equipe
+ view_name:
- title: Servidores
icon: account_circle
children:
- - title: Serviços (unidades do ILB)
- view_name: admin:servidores_servico_changelist
- - title: Servidores e colaboradores
- view_name: admin:servidores_servidor_changelist
+ - title: Serviços (unidades do ILB)
+ view_name: admin:servidores_servico_changelist
+ - title: Servidores e colaboradores
+ view_name: admin:servidores_servidor_changelist
- title: Tabelas auxiliares
icon: settings
children:
- - title: Tipos de órgãos
- view_name: admin:casas_tipoorgao_changelist
- - title: Acompanhamento convênios
- view_name: admin:convenios_statusconvenio_changelist
- - title: Tipos de serviço SEIT
- view_name: admin:servicos_tiposervico_changelist
- - title: Tipos de projeto
- view_name: admin:convenios_projeto_changelist
- - title: Categorias de ocorrências
- view_name: admin:ocorrencias_categoria_changelist
- - title: Tipos de contato
- view_name: admin:ocorrencias_tipocontato_changelist
- - title: Tipos de evento
- view_name: admin:eventos_tipoevento_changelist
- - title: Funções na equipe de eventos
- view_name: admin:eventos_funcao_changelist
- - title: Modelos de declaração
- view_name: admin:eventos_modelodeclaracao_changelist
+ - title: Tipos de órgãos
+ view_name: admin:casas_tipoorgao_changelist
+ - title: Acompanhamento convênios
+ view_name: admin:convenios_statusconvenio_changelist
+ - title: Tipos de serviço SEIT
+ view_name: admin:servicos_tiposervico_changelist
+ - title: Tipos de projeto
+ view_name: admin:convenios_projeto_changelist
+ - title: Categorias de ocorrências
+ view_name: admin:ocorrencias_categoria_changelist
+ - title: Tipos de contato
+ view_name: admin:ocorrencias_tipocontato_changelist
+ - title: Tipos de evento
+ view_name: admin:eventos_tipoevento_changelist
+ - title: Funções na equipe de eventos
+ view_name: admin:eventos_funcao_changelist
+ - title: Modelos de declaração
+ view_name: admin:eventos_modelodeclaracao_changelist