Browse Source

Migração app Casas - ainda tem TODOs

revisaoSidenav
Sesostris Vieira 3 years ago
parent
commit
8a1e0e6371
  1. 198
      sigi/apps/casas/admin.py
  2. 70
      sigi/apps/casas/filters.py
  3. 2
      sigi/apps/casas/templates/admin/casas/change_list.html
  4. 9
      sigi/apps/casas/views.py
  5. 12
      sigi/apps/convenios/models.py
  6. 10
      sigi/settings/base.py

198
sigi/apps/casas/admin.py

@ -6,18 +6,58 @@ from django.http import HttpResponseRedirect
from django.urls import reverse from django.urls import reverse
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from import_export import resources
from import_export.fields import Field
from sigi.apps.casas.forms import OrgaoForm from sigi.apps.casas.forms import OrgaoForm
from sigi.apps.casas.models import Orgao, Presidente, Funcionario, TipoOrgao from sigi.apps.casas.models import Orgao, Presidente, Funcionario, TipoOrgao
# from sigi.apps.casas.views import report_complete, labels_report, export_csv, \ # from sigi.apps.casas.views import report_complete, labels_report, export_csv, \
# labels_report_sem_presidente, report, \ # labels_report_sem_presidente, report, \
# adicionar_casas_carrinho # adicionar_casas_carrinho
from sigi.apps.casas.filters import GerentesInterlegisFilter from sigi.apps.casas.filters import (GerentesInterlegisFilter, ConvenioFilter,
ExcluirConvenioFilter)
from sigi.apps.contatos.models import Telefone from sigi.apps.contatos.models import Telefone
# from sigi.apps.convenios.models import Convenio, Projeto from sigi.apps.convenios.models import Convenio, Projeto
# from sigi.apps.ocorrencias.models import Ocorrencia # from sigi.apps.ocorrencias.models import Ocorrencia
# from sigi.apps.servicos.models import Servico, TipoServico # from sigi.apps.servicos.models import Servico, TipoServico
from sigi.apps.utils import queryset_ascii from sigi.apps.utils import queryset_ascii
from sigi.apps.utils.mixins import CartExportMixin
class OrgaoExportResourse(resources.ModelResource):
presidente = Field(column_name='presidente')
telefone = Field(column_name='telefone')
num_parlamentares = Field(column_name='num_parlamentares')
# servicos_seit = Field(column_name='servicos_seit')
contato = Field(column_name='contato')
class Meta:
model = Orgao
fields = ('municipio__codigo_ibge', 'cnpj', 'municipio__codigo_tse',
'nome', 'municipio__nome', 'municipio__uf__sigla',
'presidente', 'logradouro', 'bairro', 'cep', 'telefone',
'pagina_web', 'email', 'telefone', 'num_parlamentares',
'ult_alt_endereco', 'contato')
export_order = fields
def dehydrate_presidente(self, orgao):
return orgao.presidente
def dehydrate_telefone(self, orgao):
return orgao.telefone
def dehydrate_num_parlamentares(self, orgao):
return orgao.num_parlamentares
# def dehydrate_servicos_seit(self, orgao):
# servicos = [s.tipo_servico.nome for s in orgao.servico_set.filter(
# data_desativacao__isnull=True)]
# return ", ".join(servicos)
def dehydrate_contato(self, orgao):
return ", ".join(
[f"{c.cargo if c.cargo else 'Sem cargo'}: {c.nome} ({c.email})"
for c in orgao.funcionario_set.filter(desativado=False)
]
)
class TelefonesInline(GenericTabularInline): class TelefonesInline(GenericTabularInline):
model = Telefone model = Telefone
@ -83,76 +123,76 @@ class FuncionariosInline(admin.StackedInline):
# o campo igual a null não aparecer na frente dos mais novos # o campo igual a null não aparecer na frente dos mais novos
) )
# class ConveniosInline(admin.TabularInline): class ConveniosInline(admin.TabularInline):
# model = Convenio model = Convenio
# fieldsets = ( fieldsets = (
# (None, {'fields': ( (None, {'fields': (
# ('link_sigad', 'status_convenio', 'num_convenio', ('link_sigad', 'status_convenio', 'num_convenio',
# 'projeto', 'observacao'), 'projeto', 'observacao'),
# ('data_retorno_assinatura', 'data_pub_diario',), ('data_retorno_assinatura', 'data_pub_diario',),
# ('get_anexos',), ('get_anexos',),
# ('link_convenio',), ('link_convenio',),
# )}), )}),
# ) )
# readonly_fields = ['link_convenio', 'link_sigad', 'status_convenio', readonly_fields = ['link_convenio', 'link_sigad', 'status_convenio',
# 'num_convenio', 'projeto', 'observacao', 'data_adesao', 'num_convenio', 'projeto', 'observacao', 'data_adesao',
# 'data_retorno_assinatura', 'data_termo_aceite', 'data_retorno_assinatura', 'data_termo_aceite',
# 'data_pub_diario', 'data_devolucao_via', 'data_pub_diario', 'data_devolucao_via',
# 'data_postagem_correio', 'data_devolucao_sem_assinatura', 'data_postagem_correio', 'data_devolucao_sem_assinatura',
# 'data_retorno_sem_assinatura', 'get_anexos'] 'data_retorno_sem_assinatura', 'get_anexos']
# extra = 0 extra = 0
# can_delete = False can_delete = False
# template = 'admin/casas/convenios_inline.html' template = 'admin/casas/convenios_inline.html'
# ordering = ('-data_retorno_assinatura',) ordering = ('-data_retorno_assinatura',)
# def has_add_permission(self, request):
# return False
# def get_anexos(self, obj):
# return mark_safe('<br/>'.join(
# [f'<a href="{a.arquivo.url}" target="_blank">{a}</a>'
# for a in obj.anexo_set.all()])
# )
# get_anexos.short_description = _('Anexos')
# def status_convenio(self, obj):
# if obj.pk is None:
# return ""
# status = obj.get_status()
# if status in ["Vencido", "Desistência", "Cancelado"]:
# label = r"danger"
# elif status == "Vigente":
# label = r"success"
# elif status == "Pendente":
# label = r"warning"
# else:
# label = r"info"
# return mark_safe(f'<p class="label label-{label}">{status}</p>') def has_add_permission(self, request):
# status_convenio.short_description = _("Status do convênio") return False
# def link_convenio(self, obj): def get_anexos(self, obj):
# if obj.pk is None: return mark_safe('<br/>'.join(
# return "" [f'<a href="{a.arquivo.url}" target="_blank">{a}</a>'
# url = reverse( for a in obj.anexo_set.all()])
# f'admin:{obj._meta.app_label}_{obj._meta.module_name}_change', )
# args=[obj.pk] get_anexos.short_description = _('Anexos')
# ) + '?_popup=1'
# return mark_safe( def status_convenio(self, obj):
# f'<input id="edit_convenio-{obj.pk}" type="hidden"/>' if obj.pk is None:
# f'<a id="lookup_edit_convenio-{obj.pk}" href="{url}"' return ""
# 'class="changelink" ' status = obj.get_status()
# 'onclick="return showRelatedObjectLookupPopup(this)">'
# f'{_("Editar")}</a>' if status in ["Vencido", "Desistência", "Cancelado"]:
# ) label = r"danger"
# link_convenio.short_description = _('Editar convenio') elif status == "Vigente":
label = r"success"
elif status == "Pendente":
label = r"warning"
else:
label = r"info"
return mark_safe(f'<p class="label label-{label}">{status}</p>')
status_convenio.short_description = _("Status do convênio")
def link_convenio(self, obj):
if obj.pk is None:
return ""
url = reverse(
f'admin:{obj._meta.app_label}_{obj._meta.module_name}_change',
args=[obj.pk]
) + '?_popup=1'
return mark_safe(
f'<input id="edit_convenio-{obj.pk}" type="hidden"/>'
f'<a id="lookup_edit_convenio-{obj.pk}" href="{url}"'
'class="changelink" '
'onclick="return showRelatedObjectLookupPopup(this)">'
f'{_("Editar")}</a>'
)
link_convenio.short_description = _('Editar convenio')
# def link_sigad(self, obj): def link_sigad(self, obj):
# if obj.pk is None: if obj.pk is None:
# return "" return ""
# return mark_safe(obj.get_sigad_url()) return mark_safe(obj.get_sigad_url())
# link_sigad.short_description = _("Processo no Senado") link_sigad.short_description = _("Processo no Senado")
# class ServicoInline(admin.TabularInline): # class ServicoInline(admin.TabularInline):
# model = Servico # model = Servico
@ -223,8 +263,9 @@ class FuncionariosInline(admin.StackedInline):
@admin.register(Orgao) @admin.register(Orgao)
class OrgaoAdmin(admin.ModelAdmin): class OrgaoAdmin(CartExportMixin, admin.ModelAdmin):
form = OrgaoForm form = OrgaoForm
resource_class = OrgaoExportResourse
# actions = ['adicionar_casas', ] # actions = ['adicionar_casas', ]
inlines = (TelefonesInline, PresidenteInline, ContatoInterlegisInline, inlines = (TelefonesInline, PresidenteInline, ContatoInterlegisInline,
FuncionariosInline, ) #ConveniosInline, ServicoInline, FuncionariosInline, ) #ConveniosInline, ServicoInline,
@ -236,7 +277,8 @@ class OrgaoAdmin(admin.ModelAdmin):
# 'municipio__uf__nome', ConvenioFilter, ServicoAtivoFilter, # 'municipio__uf__nome', ConvenioFilter, ServicoAtivoFilter,
# ExcluirConvenioFilter, ServicoFilter, 'inclusao_digital',) # ExcluirConvenioFilter, ServicoFilter, 'inclusao_digital',)
list_filter = ('tipo', ('gerentes_interlegis', GerentesInterlegisFilter), list_filter = ('tipo', ('gerentes_interlegis', GerentesInterlegisFilter),
'municipio__uf__nome', 'inclusao_digital',) 'municipio__uf__nome', ConvenioFilter, ExcluirConvenioFilter,
'inclusao_digital',)
ordering = ('municipio__uf__nome', 'nome') ordering = ('municipio__uf__nome', 'nome')
queryset = queryset_ascii queryset = queryset_ascii
fieldsets = ( fieldsets = (
@ -273,13 +315,11 @@ class OrgaoAdmin(admin.ModelAdmin):
get_gerentes.short_description = _('Gerente Interlegis') get_gerentes.short_description = _('Gerente Interlegis')
def get_convenios(self, obj): def get_convenios(self, obj):
#TODO: Descomentar após migração da app Convênios return mark_safe(
# return mark_safe( '<ul>' +
# '<ul>' + ''.join([f'<li>{c}</li>' for c in obj.convenio_set.all()]) +
# ''.join([f'<li>{c}</li>' for c in obj.convenio_set.all()]) + '</ul>'
# '</ul>' )
# )
return "TODO: Descomentar após migração da app Convênios"
get_convenios.short_description = _('Convênios') get_convenios.short_description = _('Convênios')
def get_servicos(self, obj): def get_servicos(self, obj):

70
sigi/apps/casas/filters.py

@ -1,5 +1,7 @@
from django.contrib import admin from django.contrib import admin
from django.utils.translation import gettext as _
from sigi.apps.servidores.models import Servidor from sigi.apps.servidores.models import Servidor
from sigi.apps.convenios.models import Convenio, Projeto
class GerentesInterlegisFilter(admin.filters.RelatedFieldListFilter): class GerentesInterlegisFilter(admin.filters.RelatedFieldListFilter):
@ -9,40 +11,40 @@ class GerentesInterlegisFilter(admin.filters.RelatedFieldListFilter):
gerentes = Servidor.objects.filter(casas_que_gerencia__isnull=False).order_by('nome_completo').distinct() gerentes = Servidor.objects.filter(casas_que_gerencia__isnull=False).order_by('nome_completo').distinct()
self.lookup_choices = [(x.id, x) for x in gerentes] self.lookup_choices = [(x.id, x) for x in gerentes]
# class ConvenioFilter(admin.SimpleListFilter): class ConvenioFilter(admin.SimpleListFilter):
# title = _("Tipo de convênio") title = _("Tipo de convênio")
# parameter_name = 'convenio' parameter_name = 'convenio'
# def lookups(self, request, model_admin): def lookups(self, request, model_admin):
# return ( return (
# ('SC', _("Sem nenhum convênio")), ('SC', _("Sem nenhum convênio")),
# ('CC', _("Com algum convênio")), ('CC', _("Com algum convênio")),
# ) + tuple([(p.pk, p.sigla) for p in Projeto.objects.all()]) ) + tuple([(p.pk, p.sigla) for p in Projeto.objects.all()])
# def queryset(self, request, queryset): def queryset(self, request, queryset):
# if self.value() is not None: if self.value() is not None:
# if self.value() == 'SC': if self.value() == 'SC':
# queryset = queryset.filter(convenio=None) queryset = queryset.filter(convenio=None)
# elif self.value() == 'CC': elif self.value() == 'CC':
# queryset = queryset.exclude(convenio=None) queryset = queryset.exclude(convenio=None)
# else: else:
# queryset = queryset.filter(convenio__projeto_id=self.value()) queryset = queryset.filter(convenio__projeto_id=self.value())
# return queryset.distinct('municipio__uf__nome', 'nome') return queryset.distinct('municipio__uf__nome', 'nome')
# class ExcluirConvenioFilter(admin.SimpleListFilter): class ExcluirConvenioFilter(admin.SimpleListFilter):
# title=_("Excluir convênio da pesquisa") title=_("Excluir convênio da pesquisa")
# parameter_name = 'excluir_convenio' parameter_name = 'excluir_convenio'
# def lookups(self, request, model_admin): def lookups(self, request, model_admin):
# return tuple([(p.pk, p.sigla) for p in Projeto.objects.all()]) return tuple([(p.pk, p.sigla) for p in Projeto.objects.all()])
# def queryset(self, request, queryset): def queryset(self, request, queryset):
# if (self.value() is None): if (self.value() is None):
# return queryset return queryset
# else: else:
# queryset = queryset.exclude(convenio__projeto_id=self.value()).distinct('municipio__uf__nome', 'nome') queryset = queryset.exclude(convenio__projeto_id=self.value()).distinct('municipio__uf__nome', 'nome')
# return queryset return queryset
# class ServicoFilter(admin.SimpleListFilter): # class ServicoFilter(admin.SimpleListFilter):
# title = _("Serviço") # title = _("Serviço")

2
sigi/apps/casas/templates/admin/casas/change_list.html

@ -1,4 +1,4 @@
{% extends "change_list_with_cart.html" %} {% extends "cart/change_list.html" %}
{% load i18n %} {% load i18n %}
{% block object-tools-items %} {% block object-tools-items %}

9
sigi/apps/casas/views.py

@ -30,12 +30,13 @@ from sigi.apps.servidores.models import Servidor
class CasasSemConvenioReport(WeasyTemplateView): class CasasSemConvenioReport(WeasyTemplateView):
template_name = "casas/casas_sem_convenio_pdf.html" template_name = "casas/casas_sem_convenio_pdf.html"
pdf_filename = 'casas_sem_convenio.pdf'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# qs = Orgao.objects.filter(convenio=None).order_by( qs = Orgao.objects.filter(convenio=None).order_by(
# 'municipio__uf', 'municipio__uf',
# 'nome' 'nome'
# ) )
qs = Orgao.objects.order_by( qs = Orgao.objects.order_by(
'municipio__uf', 'municipio__uf',
'nome' 'nome'

12
sigi/apps/convenios/models.py

@ -5,6 +5,7 @@ from django.db import models
from django.db.models import Q, fields from django.db.models import Q, fields
from django.core.mail import send_mail from django.core.mail import send_mail
from django.urls import reverse from django.urls import reverse
from django.utils.formats import date_format
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from sigi.apps.utils import to_ascii from sigi.apps.utils import to_ascii
from sigi.apps.casas.models import Orgao from sigi.apps.casas.models import Orgao
@ -253,22 +254,23 @@ class Convenio(models.Model):
project=self.projeto.sigla project=self.projeto.sigla
if ((self.data_retorno_assinatura is None) and if ((self.data_retorno_assinatura is None) and
(self.equipada and self.data_termo_aceite is not None)): (self.equipada and self.data_termo_aceite is not None)):
date=self.data_termo_aceite.strftime(SDF) date = date_format(self.data_termo_aceite, SDF)
return _(f"{project}{number} - equipada em {date}") return _(f"{project}{number} - equipada em {date}")
elif self.data_retorno_assinatura is None: elif self.data_retorno_assinatura is None:
date = self.data_adesao.strftime(SDF) if self.data_adesao else "" date = (date_format(self.data_adesao, SDF)
if self.data_adesao else "")
return _(f"{project}, nº {number}, início em {date}") return _(f"{project}, nº {number}, início em {date}")
if ((self.data_retorno_assinatura is not None) and not if ((self.data_retorno_assinatura is not None) and not
(self.equipada and self.data_termo_aceite is not None)): (self.equipada and self.data_termo_aceite is not None)):
date=self.data_retorno_assinatura.strftime(SDF) date = date_format(self.data_retorno_assinatura, SDF)
status=self.get_status() status=self.get_status()
return _( return _(
f"{project}, nº {number}, inicio em {date}. Status: {status}" f"{project}, nº {number}, inicio em {date}. Status: {status}"
) )
if ((self.data_retorno_assinatura is not None) and if ((self.data_retorno_assinatura is not None) and
(self.equipada and self.data_termo_aceite is not None)): (self.equipada and self.data_termo_aceite is not None)):
date=self.data_retorno_assinatura.strftime(SDF) date = date_format(self.data_retorno_assinatura, SDF)
equipped_date=self.data_termo_aceite.strftime(SDF) equipped_date=date_format(self.data_termo_aceite, SDF)
return _( return _(
f"{project}, nº {number}, início em {date} e equipada em " f"{project}, nº {number}, início em {date} e equipada em "
f"{equipped_date}. Status: {self.get_status()}" f"{equipped_date}. Status: {self.get_status()}"

10
sigi/settings/base.py

@ -21,11 +21,13 @@ BASE_DIR = Path(__file__).resolve().parent.parent
INSTALLED_APPS = [ INSTALLED_APPS = [
'sigi.apps.servidores', 'sigi.apps.servidores',
'sigi.apps.contatos', 'sigi.apps.contatos',
'sigi.apps.utils',
'sigi.apps.casas', 'sigi.apps.casas',
'sigi.apps.convenios', 'sigi.apps.convenios',
'sigi.apps.inventario', 'sigi.apps.inventario',
'django_bootstrap5',
'localflavor', 'localflavor',
'import_export',
'django_bootstrap5',
'django.forms', 'django.forms',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
@ -96,3 +98,9 @@ STATIC_ROOT = '/var/www/sigi/static/'
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# Django import-export settings
# https://django-import-export.readthedocs.io/en/latest/installation.html#settings
IMPORT_EXPORT_USE_TRANSACTIONS = True
IMPORT_EXPORT_SKIP_ADMIN_LOG = True
Loading…
Cancel
Save