mirror of https://github.com/interlegis/sigi.git
Sesóstris Vieira
9 months ago
4 changed files with 208 additions and 2 deletions
@ -0,0 +1,8 @@ |
|||||
|
from django.urls import path |
||||
|
from sigi.apps.casas import views |
||||
|
|
||||
|
urlpatterns = [ |
||||
|
path("orgaoatendido/", views.ApiOrgaoAtendidoList.as_view()), |
||||
|
path("orgaoatendido/<int:pk>/", views.ApiOrgaoAtendidoList.as_view()), |
||||
|
path("orgaoatendido/<slug:uf>/", views.ApiOrgaoAtendidoList.as_view()), |
||||
|
] |
@ -0,0 +1,143 @@ |
|||||
|
import base64 |
||||
|
import magic |
||||
|
from pathlib import Path |
||||
|
from rest_framework import serializers |
||||
|
from sigi.apps.casas.models import Orgao |
||||
|
from sigi.apps.convenios.models import Convenio, Anexo |
||||
|
from sigi.apps.eventos.models import Evento |
||||
|
from sigi.apps.servicos.models import Servico |
||||
|
|
||||
|
|
||||
|
class AnexoConvenioSerializer(serializers.ModelSerializer): |
||||
|
class Meta: |
||||
|
model = Anexo |
||||
|
fields = ["arquivo", "descricao"] |
||||
|
|
||||
|
|
||||
|
class ConvenioSerializer(serializers.ModelSerializer): |
||||
|
projeto = serializers.SlugRelatedField(read_only=True, slug_field="nome") |
||||
|
status = serializers.SerializerMethodField("get_status") |
||||
|
inicio_vigencia = serializers.SerializerMethodField("get_inicio_vigencia") |
||||
|
termino_vigencia = serializers.SerializerMethodField( |
||||
|
"get_termino_vigencia" |
||||
|
) |
||||
|
documento_gescon = serializers.SerializerMethodField( |
||||
|
"get_documento_gescon" |
||||
|
) |
||||
|
anexo_set = AnexoConvenioSerializer(many=True, read_only=True) |
||||
|
|
||||
|
class Meta: |
||||
|
model = Convenio |
||||
|
fields = [ |
||||
|
"projeto", |
||||
|
"num_convenio", |
||||
|
"status", |
||||
|
"inicio_vigencia", |
||||
|
"termino_vigencia", |
||||
|
"documento_gescon", |
||||
|
"anexo_set", |
||||
|
] |
||||
|
|
||||
|
def get_status(self, obj): |
||||
|
return obj.get_status() |
||||
|
|
||||
|
def get_inicio_vigencia(self, obj): |
||||
|
return obj.data_retorno_assinatura |
||||
|
|
||||
|
def get_termino_vigencia(self, obj): |
||||
|
return obj.data_termino_vigencia |
||||
|
|
||||
|
def get_documento_gescon(self, obj): |
||||
|
return obj.get_url_gescon() |
||||
|
|
||||
|
|
||||
|
class EventoSerializer(serializers.ModelSerializer): |
||||
|
class Meta: |
||||
|
model = Evento |
||||
|
fields = [ |
||||
|
"nome", |
||||
|
"data_inicio", |
||||
|
"data_termino", |
||||
|
"num_processo", |
||||
|
"total_participantes", |
||||
|
] |
||||
|
|
||||
|
|
||||
|
class ServicoSerializer(serializers.ModelSerializer): |
||||
|
tipo_servico = serializers.SlugRelatedField( |
||||
|
read_only=True, slug_field="nome" |
||||
|
) |
||||
|
url = serializers.SerializerMethodField("get_url") |
||||
|
resultado_verificacao = serializers.SerializerMethodField( |
||||
|
"get_resultado_verificacao" |
||||
|
) |
||||
|
|
||||
|
class Meta: |
||||
|
model = Servico |
||||
|
fields = [ |
||||
|
"tipo_servico", |
||||
|
"data_ativacao", |
||||
|
"url", |
||||
|
"data_verificacao", |
||||
|
"resultado_verificacao", |
||||
|
"data_ultimo_uso", |
||||
|
] |
||||
|
|
||||
|
def get_url(self, obj): |
||||
|
if not obj.url: |
||||
|
return "" |
||||
|
if "http" in obj.url: |
||||
|
return obj.url |
||||
|
else: |
||||
|
return f"http://{ obj.url }" |
||||
|
|
||||
|
def get_resultado_verificacao(self, obj): |
||||
|
return obj.get_resultado_verificacao_display() |
||||
|
|
||||
|
|
||||
|
class OrgaoAtendidoSerializer(serializers.ModelSerializer): |
||||
|
tipo = serializers.StringRelatedField() |
||||
|
municipio = serializers.SlugRelatedField(read_only=True, slug_field="nome") |
||||
|
uf_nome = serializers.SerializerMethodField("get_uf_nome") |
||||
|
uf_sigla = serializers.SerializerMethodField("get_uf_sigla") |
||||
|
foto_base64 = serializers.SerializerMethodField("get_foto_base64") |
||||
|
convenio_set = ConvenioSerializer(many=True, read_only=True) |
||||
|
evento_set = EventoSerializer(many=True, read_only=True) |
||||
|
servico_set = ServicoSerializer(many=True, read_only=True) |
||||
|
|
||||
|
class Meta: |
||||
|
model = Orgao |
||||
|
fields = [ |
||||
|
"id", |
||||
|
"nome", |
||||
|
"sigla", |
||||
|
"tipo", |
||||
|
"cnpj", |
||||
|
"logradouro", |
||||
|
"bairro", |
||||
|
"municipio", |
||||
|
"uf_nome", |
||||
|
"uf_sigla", |
||||
|
"cep", |
||||
|
"email", |
||||
|
"telefone_geral", |
||||
|
"foto", |
||||
|
"foto_base64", |
||||
|
"convenio_set", |
||||
|
"evento_set", |
||||
|
"servico_set", |
||||
|
] |
||||
|
|
||||
|
def get_uf_nome(self, obj): |
||||
|
return obj.municipio.uf.nome |
||||
|
|
||||
|
def get_uf_sigla(self, obj): |
||||
|
return obj.municipio.uf.sigla |
||||
|
|
||||
|
def get_foto_base64(self, obj): |
||||
|
if obj.foto and Path(obj.foto.path).exists(): |
||||
|
mime_type = magic.from_file(obj.foto.path, mime=True) |
||||
|
obj.foto.file.seek(0) # Garante que está no início do arquivo |
||||
|
b64str = (base64.b64encode(obj.foto.file.read())).decode("ascii") |
||||
|
return f"data:{mime_type};base64, {b64str}" |
||||
|
return None |
Loading…
Reference in new issue