Browse Source

Permite colocar anexos em ocorrências na tela de Casas

dependabot/pip/requirements/pillow-11.3.0
Sesóstris Vieira 2 months ago
parent
commit
9b420f4424
  1. 40
      sigi/apps/casas/admin.py
  2. 24
      sigi/apps/casas/forms.py

40
sigi/apps/casas/admin.py

@ -15,7 +15,7 @@ from djbs import djbs_constants as djbsc
from import_export import resources from import_export import resources
from import_export.admin import ExportActionMixin from import_export.admin import ExportActionMixin
from import_export.fields import Field from import_export.fields import Field
from sigi.apps.casas.forms import OrgaoForm from sigi.apps.casas.forms import OrgaoForm, OcorrenciaInlineForm
from sigi.apps.casas.models import Orgao, Funcionario, TipoOrgao from sigi.apps.casas.models import Orgao, Funcionario, TipoOrgao
from sigi.apps.casas.filters import ( from sigi.apps.casas.filters import (
GerentesInterlegisFilter, GerentesInterlegisFilter,
@ -146,7 +146,7 @@ class ParlamentarInline(admin.TabularInline):
class FuncionarioInline(admin.StackedInline): class FuncionarioInline(admin.StackedInline):
model = Funcionario model = Funcionario
djbs_cols = "1" stacked_cols = "1"
fields = ( fields = (
("desativado", "ult_alteracao"), ("desativado", "ult_alteracao"),
"setor", "setor",
@ -302,21 +302,25 @@ class ServicoInline(admin.TabularInline):
class OcorrenciaInline(admin.StackedInline): class OcorrenciaInline(admin.StackedInline):
model = Ocorrencia model = Ocorrencia
form = OcorrenciaInlineForm
stacked_cols = 1
fields = ( fields = (
"data_criacao", ("data_criacao", "data_modificacao"),
"data_modificacao", ("categoria", "tipo_contato"),
"categoria",
"tipo_contato",
"assunto", "assunto",
"prioridade", ("prioridade", "status", "ticket"),
"status", ("descricao", "resolucao"),
"ticket",
"descricao",
"resolucao",
"servidor_registro", "servidor_registro",
("anexo", "descricao_anexo"),
"get_anexos",
) )
autocomplete_fields = ("categoria", "tipo_contato") autocomplete_fields = ("categoria", "tipo_contato")
readonly_fields = ["data_criacao", "data_modificacao", "servidor_registro"] readonly_fields = [
"data_criacao",
"data_modificacao",
"servidor_registro",
"get_anexos",
]
ordering = ("-data_modificacao",) ordering = ("-data_modificacao",)
extra = 0 extra = 0
show_change_link = True show_change_link = True
@ -332,6 +336,18 @@ class OcorrenciaInline(admin.StackedInline):
return super().has_change_permission(request, obj) return super().has_change_permission(request, obj)
return False return False
@admin.display(description=_("Anexos"))
@mark_safe
def get_anexos(self, obj):
anexos = [
f"<li><a href='{a.arquivo.url}'>{a.descricao}</a></li>"
for a in obj.anexo_set.all()
]
if anexos:
return "<ul>" + "".join(anexos) + "</ul>"
else:
return "Sem anexos"
@admin.register(TipoOrgao) @admin.register(TipoOrgao)
class TipoOrgaoAdmin(admin.ModelAdmin): class TipoOrgaoAdmin(admin.ModelAdmin):

24
sigi/apps/casas/forms.py

@ -3,6 +3,7 @@ from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from localflavor.br.forms import BRZipCodeField from localflavor.br.forms import BRZipCodeField
from sigi.apps.casas.models import Funcionario, Orgao from sigi.apps.casas.models import Funcionario, Orgao
from sigi.apps.ocorrencias.models import Ocorrencia, Anexo
from sigi.apps.servidores.models import Servidor from sigi.apps.servidores.models import Servidor
from sigi.apps.utils import valida_cnpj from sigi.apps.utils import valida_cnpj
@ -109,3 +110,26 @@ class CnpjErradoForm(forms.Form):
required=False, required=False,
initial=False, initial=False,
) )
class OcorrenciaInlineForm(forms.ModelForm):
anexo = forms.FileField(label=_("Adicionar anexo"), required=False)
descricao_anexo = forms.CharField(
label=_("Descrição do novo anexo"), max_length=70, required=False
)
class Meta:
model = Ocorrencia
fields = "__all__"
def save(self, commit=True):
instance = super().save(commit=False)
arquivo = self.cleaned_data["anexo"]
descricao = self.cleaned_data["descricao_anexo"]
if arquivo:
anexo = Anexo(arquivo=arquivo, descricao=descricao)
instance.anexo_set.add(anexo, bulk=False)
self.cleaned_data["anexo"] = None
if commit:
instance.save()
return instance

Loading…
Cancel
Save