mirror of https://github.com/interlegis/sigi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
323 lines
8.9 KiB
323 lines
8.9 KiB
from django.db.models import Q
|
|
from django.contrib import admin
|
|
from django.utils import timezone
|
|
from django.utils.translation import gettext as _
|
|
from django.utils.safestring import mark_safe
|
|
from django_weasyprint.views import WeasyTemplateResponse
|
|
from import_export import resources
|
|
from import_export.admin import ExportActionMixin
|
|
from tinymce.models import HTMLField
|
|
from tinymce.widgets import AdminTinyMCE
|
|
from sigi.apps.convenios.models import (
|
|
Projeto,
|
|
StatusConvenio,
|
|
TipoSolicitacao,
|
|
Convenio,
|
|
EquipamentoPrevisto,
|
|
Anexo,
|
|
Gescon,
|
|
)
|
|
from sigi.apps.utils.mixins import AsciifyQParameter
|
|
from sigi.apps.casas.admin import GerentesInterlegisFilter
|
|
from sigi.apps.utils.mixins import ReturnMixin
|
|
from sigi.apps.utils.filters import DateRangeFilter
|
|
|
|
|
|
class ConvenioExportResourse(resources.ModelResource):
|
|
class Meta:
|
|
model = Convenio
|
|
fields = (
|
|
"num_processo_sf",
|
|
"num_convenio",
|
|
"projeto__nome",
|
|
"casa_legislativa__nome",
|
|
"casa_legislativa__municipio__nome",
|
|
"casa_legislativa__municipio__uf__sigla",
|
|
"data_sigi",
|
|
"data_sigad",
|
|
"data_adesao",
|
|
"data_retorno_assinatura",
|
|
"data_solicitacao",
|
|
"atualizacao_gescon",
|
|
"observacao_gescon",
|
|
"tipo_solicitacao__nome",
|
|
"status__nome",
|
|
"acompanha__nome_completo",
|
|
"servidor_gestao__nome_completo",
|
|
"observacao",
|
|
)
|
|
export_order = fields
|
|
|
|
|
|
class AnexosInline(admin.TabularInline):
|
|
model = Anexo
|
|
extra = 2
|
|
exclude = [
|
|
"data_pub",
|
|
]
|
|
|
|
|
|
class AnexoAdmin(admin.ModelAdmin):
|
|
date_hierarchy = "data_pub"
|
|
exclude = [
|
|
"data_pub",
|
|
]
|
|
list_display = ("arquivo", "descricao", "data_pub", "convenio")
|
|
autocomplete_fields = ("convenio",)
|
|
search_fields = (
|
|
"descricao",
|
|
"convenio__id",
|
|
"arquivo",
|
|
"convenio__casa_legislativa__nome",
|
|
)
|
|
|
|
|
|
class ConvenioVigenteFilter(admin.filters.SimpleListFilter):
|
|
parameter_name = "vigencia"
|
|
title = _("Vigência")
|
|
|
|
def lookups(self, request, model_admin):
|
|
return (
|
|
("vigentes", _("Vigentes")),
|
|
("vencidos", _("Vencidos")),
|
|
("pendentes", _("Pendentes")),
|
|
)
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() == "vigentes":
|
|
return queryset.filter(
|
|
Q(data_termino_vigencia__gte=timezone.localdate())
|
|
| Q(data_termino_vigencia=None)
|
|
).exclude(data_retorno_assinatura=None)
|
|
elif self.value() == "vencidos":
|
|
return queryset.exclude(data_termino_vigencia=None).filter(
|
|
data_termino_vigencia__lt=timezone.localdate()
|
|
)
|
|
elif self.value() == "pendentes":
|
|
return queryset.filter(
|
|
data_retorno_assinatura=None,
|
|
data_devolucao_sem_assinatura=None,
|
|
data_retorno_sem_assinatura=None,
|
|
)
|
|
return queryset
|
|
|
|
|
|
@admin.register(Projeto)
|
|
class ProjetoAdmin(admin.ModelAdmin):
|
|
list_display = ("sigla", "nome", "termino_indefinido")
|
|
formfield_overrides = {HTMLField: {"widget": AdminTinyMCE}}
|
|
|
|
|
|
@admin.register(Convenio)
|
|
class ConvenioAdmin(
|
|
AsciifyQParameter, ReturnMixin, ExportActionMixin, admin.ModelAdmin
|
|
):
|
|
fieldsets = (
|
|
(
|
|
None,
|
|
{
|
|
"fields": (
|
|
"casa_legislativa",
|
|
"num_processo_sf",
|
|
"num_convenio",
|
|
"projeto",
|
|
"data_sigi",
|
|
)
|
|
},
|
|
),
|
|
(
|
|
_("Acompanhamento no gabinete"),
|
|
{
|
|
"fields": (
|
|
"data_solicitacao",
|
|
"data_sigad",
|
|
"observacao",
|
|
)
|
|
},
|
|
),
|
|
(
|
|
_("Gestão do convênio"),
|
|
{
|
|
"fields": (
|
|
"servico_gestao",
|
|
"servidor_gestao",
|
|
)
|
|
},
|
|
),
|
|
(
|
|
_("Datas"),
|
|
{
|
|
"fields": (
|
|
"data_retorno_assinatura",
|
|
"data_termino_vigencia",
|
|
"data_pub_diario",
|
|
)
|
|
},
|
|
),
|
|
(
|
|
_("Extinção / desistência"),
|
|
{
|
|
"fields": (
|
|
"data_extincao",
|
|
"motivo_extincao",
|
|
)
|
|
},
|
|
),
|
|
(
|
|
_("Gescon"),
|
|
{
|
|
"fields": (
|
|
"erro_gescon",
|
|
"atualizacao_gescon",
|
|
"observacao_gescon",
|
|
"link_gescon",
|
|
)
|
|
},
|
|
),
|
|
)
|
|
readonly_fields = (
|
|
"data_sigi",
|
|
"erro_gescon",
|
|
"atualizacao_gescon",
|
|
"observacao_gescon",
|
|
"link_gescon",
|
|
)
|
|
inlines = (AnexosInline,)
|
|
list_display = (
|
|
"num_convenio",
|
|
"projeto",
|
|
"casa_legislativa",
|
|
"get_uf",
|
|
"status_convenio",
|
|
"link_sigad",
|
|
"data_retorno_assinatura",
|
|
"data_termino_vigencia",
|
|
)
|
|
list_display_links = (
|
|
"num_convenio",
|
|
"casa_legislativa",
|
|
)
|
|
list_filter = (
|
|
("data_retorno_assinatura", DateRangeFilter),
|
|
("data_termino_vigencia", DateRangeFilter),
|
|
ConvenioVigenteFilter,
|
|
("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter),
|
|
"projeto",
|
|
"casa_legislativa__tipo",
|
|
"conveniada",
|
|
"equipada",
|
|
"casa_legislativa__municipio__uf",
|
|
"erro_gescon",
|
|
)
|
|
ordering = (
|
|
"casa_legislativa__municipio__uf__sigla",
|
|
"casa_legislativa",
|
|
"-data_retorno_assinatura",
|
|
)
|
|
autocomplete_fields = (
|
|
"casa_legislativa",
|
|
"servico_gestao",
|
|
"servidor_gestao",
|
|
)
|
|
search_fields = (
|
|
"id",
|
|
"casa_legislativa__search_text",
|
|
"casa_legislativa__sigla",
|
|
"num_processo_sf",
|
|
"num_convenio",
|
|
)
|
|
resource_class = ConvenioExportResourse
|
|
reports = [
|
|
"report_convenios",
|
|
]
|
|
|
|
def get_uf(self, obj):
|
|
return obj.casa_legislativa.municipio.uf.sigla
|
|
|
|
get_uf.short_description = _("UF")
|
|
get_uf.admin_order_field = "casa_legislativa__municipio__uf__sigla"
|
|
|
|
def status_convenio(self, obj):
|
|
if obj.pk is None:
|
|
return ""
|
|
status = obj.get_status()
|
|
|
|
if status in ["Vencido", "Desistência", "Cancelado", "Extinto"]:
|
|
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>')
|
|
|
|
status_convenio.short_description = _("Status do convênio")
|
|
|
|
def link_sigad(self, obj):
|
|
if obj.pk is None:
|
|
return ""
|
|
return mark_safe(obj.get_sigad_url())
|
|
|
|
link_sigad.short_description = _("Processo no Senado")
|
|
|
|
def link_gescon(self, obj):
|
|
if not obj.id_contrato_gescon:
|
|
return ""
|
|
return mark_safe(
|
|
f"<a href='{obj.get_url_gescon()}'>{obj.id_contrato_gescon}</a>"
|
|
)
|
|
|
|
link_gescon.short_description = _("Download MINUTA ASSINADA do Gescon")
|
|
|
|
def report_convenios(self, request):
|
|
context = {
|
|
"convenios": self.get_queryset(request).order_by(
|
|
"casa_legislativa__tipo",
|
|
"casa_legislativa__municipio__uf__sigla",
|
|
"data_retorno_assinatura",
|
|
),
|
|
"title": _("Relatório de parcerias"),
|
|
}
|
|
return WeasyTemplateResponse(
|
|
filename="relatorio_convenios.pdf",
|
|
request=request,
|
|
template="convenios/convenios_report.html",
|
|
context=context,
|
|
content_type="application/pdf",
|
|
)
|
|
|
|
report_convenios.title = _("Relatório de convênios")
|
|
|
|
def get_actions(self, request):
|
|
actions = super(ConvenioAdmin, self).get_actions(request)
|
|
if "delete_selected" in actions:
|
|
del actions["delete_selected"]
|
|
return actions
|
|
|
|
|
|
@admin.register(EquipamentoPrevisto)
|
|
class EquipamentoPrevistoAdmin(admin.ModelAdmin):
|
|
list_display = ("convenio", "equipamento", "quantidade")
|
|
list_display_links = ("convenio", "equipamento")
|
|
ordering = ("convenio", "equipamento")
|
|
autocomplete_fields = ("convenio", "equipamento")
|
|
search_fields = (
|
|
"convenio__id",
|
|
"equipamento__fabricante__nome",
|
|
"equipamento__modelo__modelo",
|
|
"equipamento__modelo__tipo__tipo",
|
|
)
|
|
|
|
|
|
@admin.register(Gescon)
|
|
class GesconAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"url_gescon",
|
|
"email",
|
|
)
|
|
exclude = ["ultima_importacao", "checksums"]
|
|
|
|
|
|
admin.site.register(StatusConvenio)
|
|
admin.site.register(TipoSolicitacao)
|
|
|