diff --git a/sigi/apps/casas/admin.py b/sigi/apps/casas/admin.py index 4cb0819..c4e21a9 100644 --- a/sigi/apps/casas/admin.py +++ b/sigi/apps/casas/admin.py @@ -11,6 +11,8 @@ from django.utils.html import format_html from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ from django_weasyprint.views import WeasyTemplateResponse +from import_export import resources +from import_export.admin import ExportActionMixin from import_export.fields import Field from sigi.apps.casas.forms import OrgaoForm from sigi.apps.casas.models import Orgao, Funcionario, TipoOrgao @@ -30,14 +32,10 @@ from sigi.apps.servicos.models import Servico from sigi.apps.servicos.filters import ServicoAtivoFilter from sigi.apps.servidores.models import Servidor from sigi.apps.utils.mixins import AsciifyQParameter -from sigi.apps.utils.mixins import ( - ReturnMixin, - CartExportReportMixin, - LabeledResourse, -) +from sigi.apps.utils.mixins import ReturnMixin -class OrgaoExportResourceContato(LabeledResourse): +class OrgaoExportResourceContato(resources.ModelResource): class Meta: model = Orgao fields = ("nome", "email") @@ -55,7 +53,7 @@ class OrgaoExportResourceContato(LabeledResourse): return super().export(queryset, *args, **kwargs) -class OrgaoExportResourseGeral(LabeledResourse): +class OrgaoExportResourseGeral(resources.ModelResource): presidente = Field(column_name="presidente") telefone = Field(column_name="telefone") # servicos_seit = Field(column_name='servicos_seit') @@ -346,7 +344,7 @@ class FuncionarioAdmin(ReturnMixin, admin.ModelAdmin): @admin.register(Orgao) -class OrgaoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin): +class OrgaoAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin): form = OrgaoForm resource_classes = [OrgaoExportResourseGeral, OrgaoExportResourceContato] inlines = ( diff --git a/sigi/apps/contatos/admin.py b/sigi/apps/contatos/admin.py index c095c98..db2d3cb 100644 --- a/sigi/apps/contatos/admin.py +++ b/sigi/apps/contatos/admin.py @@ -1,6 +1,8 @@ from admin_auto_filters.filters import AutocompleteFilter from django.contrib import admin from django.utils.translation import gettext as _ +from import_export import resources +from import_export.admin import ExportActionMixin from sigi.apps.utils.filters import RangeFilter from sigi.apps.contatos.models import ( UnidadeFederativa, @@ -12,11 +14,6 @@ from sigi.apps.contatos.models import ( ) from sigi.apps.parlamentares.models import Senador from sigi.apps.utils.mixins import AsciifyQParameter -from sigi.apps.utils.mixins import ( - ReturnMixin, - CartExportMixin, - LabeledResourse, -) class MicrorregiaoFilter(AutocompleteFilter): @@ -24,7 +21,7 @@ class MicrorregiaoFilter(AutocompleteFilter): field_name = "microrregiao" -class UnidadeFederativaResource(LabeledResourse): +class UnidadeFederativaResource(resources.ModelResource): class Meta: model = UnidadeFederativa fields = ("codigo_ibge", "nome", "sigla", "regiao", "populacao") @@ -35,7 +32,7 @@ class UnidadeFederativaResource(LabeledResourse): return dict(UnidadeFederativa.REGIAO_CHOICES)[uf.regiao] -class MunicipioResource(LabeledResourse): +class MunicipioResource(resources.ModelResource): class Meta: model = Municipio fields = ( @@ -81,7 +78,7 @@ class SenadorInline(admin.StackedInline): @admin.register(UnidadeFederativa) class UnidadeFederativaAdmin( - AsciifyQParameter, CartExportMixin, admin.ModelAdmin + AsciifyQParameter, ExportActionMixin, admin.ModelAdmin ): actions = None resource_classes = [UnidadeFederativaResource] @@ -117,7 +114,7 @@ class MicrorregiaoAdmin(AsciifyQParameter, admin.ModelAdmin): @admin.register(Municipio) -class MunicipioAdmin(AsciifyQParameter, CartExportMixin, admin.ModelAdmin): +class MunicipioAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin): actions = None resource_classes = [MunicipioResource] list_display = ( diff --git a/sigi/apps/convenios/admin.py b/sigi/apps/convenios/admin.py index 2cf6cc4..51f69f9 100644 --- a/sigi/apps/convenios/admin.py +++ b/sigi/apps/convenios/admin.py @@ -4,6 +4,8 @@ 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 ( @@ -17,15 +19,11 @@ from sigi.apps.convenios.models import ( ) from sigi.apps.utils.mixins import AsciifyQParameter from sigi.apps.casas.admin import GerentesInterlegisFilter -from sigi.apps.utils.mixins import ( - ReturnMixin, - CartExportReportMixin, - LabeledResourse, -) +from sigi.apps.utils.mixins import ReturnMixin from sigi.apps.utils.filters import DateRangeFilter -class ConvenioExportResourse(LabeledResourse): +class ConvenioExportResourse(resources.ModelResource): class Meta: model = Convenio fields = ( @@ -112,7 +110,7 @@ class ProjetoAdmin(admin.ModelAdmin): @admin.register(Convenio) class ConvenioAdmin( - AsciifyQParameter, ReturnMixin, CartExportReportMixin, admin.ModelAdmin + AsciifyQParameter, ReturnMixin, ExportActionMixin, admin.ModelAdmin ): fieldsets = ( ( diff --git a/sigi/apps/espacos/admin.py b/sigi/apps/espacos/admin.py index 090ffd0..0c03c7a 100644 --- a/sigi/apps/espacos/admin.py +++ b/sigi/apps/espacos/admin.py @@ -5,6 +5,8 @@ from django.urls import path, reverse from django.utils.safestring import mark_safe from django.utils.translation import gettext as _, ngettext from django.shortcuts import get_object_or_404, redirect +from import_export import resources +from import_export.admin import ExportActionMixin from import_export.fields import Field from sigi.apps.espacos.models import ( Espaco, @@ -13,10 +15,9 @@ from sigi.apps.espacos.models import ( RecursoSolicitado, ) from sigi.apps.espacos.forms import ReservaAdminForm -from sigi.apps.utils.mixins import CartExportMixin, LabeledResourse -class ReservaResource(LabeledResourse): +class ReservaResource(resources.ModelResource): recursos_solicitados = Field(column_name="recursos solicitados") class Meta: @@ -67,7 +68,7 @@ class RecursoAdmin(admin.ModelAdmin): @admin.register(Reserva) -class ReservaAdmin(CartExportMixin, admin.ModelAdmin): +class ReservaAdmin(ExportActionMixin, admin.ModelAdmin): form = ReservaAdminForm resource_classes = [ReservaResource] list_display = [ diff --git a/sigi/apps/eventos/admin.py b/sigi/apps/eventos/admin.py index 809edc1..c2a2c62 100644 --- a/sigi/apps/eventos/admin.py +++ b/sigi/apps/eventos/admin.py @@ -27,6 +27,8 @@ from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ from django_weasyprint.utils import django_url_fetcher from django_weasyprint.views import WeasyTemplateResponse +from import_export import resources +from import_export.admin import ExportActionMixin from import_export.fields import Field from tinymce.models import HTMLField from tinymce.widgets import AdminTinyMCE @@ -56,13 +58,7 @@ from sigi.apps.eventos.views import ( ) from sigi.apps.utils import abreviatura from sigi.apps.utils.filters import DateRangeFilter -from sigi.apps.utils.mixins import ( - AsciifyQParameter, - CartExportMixin, - CartExportReportMixin, - LabeledResourse, - ValueLabeledResource, -) +from sigi.apps.utils.mixins import AsciifyQParameter class ActVigenteFilter(admin.SimpleListFilter): @@ -113,7 +109,7 @@ class MicrorregiaoFilter(AutocompleteFilter): rel_model = Municipio -class SolicitacaoResource(LabeledResourse): +class SolicitacaoResource(resources.ModelResource): act_vigente = Field(column_name="ACT vigente") data_termino_act = Field(column_name="tĂ©rmino vigĂȘncia ACT") oficinas = Field(column_name="oficinas solicitadas") @@ -246,7 +242,7 @@ class SolicitacaoResource(LabeledResourse): return obj.casa.municipio.uf.get_regiao_display() -class EventoResource(ValueLabeledResource): +class EventoResource(resources.ModelResource): class Meta: model = Evento fields = ( @@ -397,7 +393,7 @@ class TipoEventoAdmin(admin.ModelAdmin): @admin.register(Solicitacao) -class SolicitacaoAdmin(AsciifyQParameter, CartExportMixin, admin.ModelAdmin): +class SolicitacaoAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin): resource_class = SolicitacaoResource list_display = ( "casa", @@ -873,7 +869,7 @@ class ModeloDeclaracaoAdmin(admin.ModelAdmin): @admin.register(Evento) -class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin): +class EventoAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin): form = EventoAdminForm resource_class = EventoResource fieldsets = ( @@ -1005,6 +1001,7 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin): CronogramaInline, ) save_as = True + actions = ["custos_eventos_report", "custos_servidor_report"] reports = ["custos_eventos_report", "custos_servidor_report"] @admin.display(description=_("banner")) @@ -1481,19 +1478,14 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin): content_type="application/pdf", ) - def custos_eventos_report(self, request): - context = context_custos_eventos(self.get_queryset(request)) + @admin.action(description=_("Custos por eventos")) + def custos_eventos_report(self, request, queryset): + context = context_custos_eventos(queryset) context["data_inicio"] = ( - self.get_queryset(request) - .order_by("data_inicio") - .first() - .data_inicio + queryset.order_by("data_inicio").first().data_inicio ) context["data_fim"] = ( - self.get_queryset(request) - .order_by("data_termino") - .last() - .data_termino + queryset.order_by("data_termino").last().data_termino ) return WeasyTemplateResponse( filename=f"custos_eventos-{timezone.localdate()}.pdf", @@ -1503,8 +1495,9 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin): content_type="application/pdf", ) - custos_eventos_report.title = _("Custos por eventos") + custos_eventos_report.djbs_icon = "report" + @admin.action(description=_("Custos por servidor")) def custos_servidor_report(self, request): context = context_custos_servidor(self.get_queryset(request)) context["data_inicio"] = ( @@ -1529,7 +1522,7 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin): content_type="application/pdf", ) - custos_servidor_report.title = _("Custos por servidor") + custos_servidor_report.djbs_icon = "report" def create_course(self, request, object_id): evento = get_object_or_404(Evento, id=object_id) diff --git a/sigi/apps/parlamentares/admin.py b/sigi/apps/parlamentares/admin.py index b90240d..7f6e231 100644 --- a/sigi/apps/parlamentares/admin.py +++ b/sigi/apps/parlamentares/admin.py @@ -9,22 +9,17 @@ from django.utils import timezone from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ from import_export import resources -from import_export.admin import ImportMixin +from import_export.admin import ImportMixin, ExportActionMixin from import_export.formats.base_formats import CSV from sigi.apps.contatos.models import UnidadeFederativa from sigi.apps.parlamentares.jobs import import_path, json_path from sigi.apps.parlamentares.models import Partido, Parlamentar, Senador from sigi.apps.parlamentares.forms import ImportForm from sigi.apps.utils.filters import AlphabeticFilter -from sigi.apps.utils.mixins import ( - ReturnMixin, - CartImportExportMixin, - CartExportMixin, - LabeledResourse, -) +from sigi.apps.utils.mixins import ReturnMixin -class ParlamentarResource(LabeledResourse): +class ParlamentarResource(resources.ModelResource): class Meta: model = Parlamentar fields = ( @@ -142,13 +137,13 @@ class ParlamentarNomeCompletoFilter(AlphabeticFilter): @admin.register(Partido) -class PartidoAdmin(CartImportExportMixin, admin.ModelAdmin): +class PartidoAdmin(ImportMixin, ExportActionMixin, admin.ModelAdmin): list_display = ("legenda", "nome", "sigla") search_fields = ("legenda", "nome", "sigla") @admin.register(Parlamentar) -class ParlamentarAdmin(ReturnMixin, CartExportMixin, admin.ModelAdmin): +class ParlamentarAdmin(ReturnMixin, ExportActionMixin, admin.ModelAdmin): resource_class = ParlamentarResource import_export_change_list_template = ( "admin/parlamentares/parlamentar/cart/" diff --git a/sigi/apps/servicos/admin.py b/sigi/apps/servicos/admin.py index 759fbe1..4c1ef75 100644 --- a/sigi/apps/servicos/admin.py +++ b/sigi/apps/servicos/admin.py @@ -4,7 +4,9 @@ from django.utils.encoding import force_str from django.utils.safestring import mark_safe from django.http import Http404, HttpResponseRedirect from django.utils.translation import gettext as _ +from import_export import resources from import_export.fields import Field +from import_export.admin import ExportActionMixin from sigi.apps.casas.admin import GerentesInterlegisFilter from sigi.apps.servicos.models import Servico, LogServico, TipoServico from sigi.apps.servicos.filters import ( @@ -16,14 +18,10 @@ from sigi.apps.convenios.filters import ( ExcluirTipoProjetoFilter, ) from sigi.apps.utils.filters import DateRangeFilter -from sigi.apps.utils.mixins import ( - ReturnMixin, - CartExportMixin, - ValueLabeledResource, -) +from sigi.apps.utils.mixins import ReturnMixin -class ServicoExportResourse(ValueLabeledResource): +class ServicoExportResourse(resources.ModelResource): hospedagem_interlegis = Field(column_name="hospedagem no interlegis") class Meta: @@ -76,7 +74,7 @@ class TipoServicoAdmin(admin.ModelAdmin): @admin.register(Servico) -class ServicoAdmin(ReturnMixin, CartExportMixin, admin.ModelAdmin): +class ServicoAdmin(ReturnMixin, ExportActionMixin, admin.ModelAdmin): actions = [ "calcular_data_uso", ] diff --git a/sigi/templates/admin/import_export/change_list.html b/sigi/templates/admin/import_export/change_list.html new file mode 100644 index 0000000..f5e6528 --- /dev/null +++ b/sigi/templates/admin/import_export/change_list.html @@ -0,0 +1 @@ +{% extends ie_base_change_list_template|default:"admin/change_list.html" %} \ No newline at end of file diff --git a/sigi/templates/admin/import_export/change_list_export_item.html b/sigi/templates/admin/import_export/change_list_export_item.html new file mode 100644 index 0000000..d81a176 --- /dev/null +++ b/sigi/templates/admin/import_export/change_list_export_item.html @@ -0,0 +1,9 @@ +{% load i18n djbs_extras %} +{% load admin_urls %} + +{% if has_export_permission %} + + {% icon "export-all" %} + {% translate "Export all" %} + +{% endif %} \ No newline at end of file