diff --git a/sapl/configuracao_impressao/__init__.py b/sapl/configuracao_impressao/__init__.py new file mode 100644 index 000000000..07cff8388 --- /dev/null +++ b/sapl/configuracao_impressao/__init__.py @@ -0,0 +1 @@ +default_app_config = 'sapl.configuracao_impressao.apps.AppConfig' diff --git a/sapl/configuracao_impressao/admin.py b/sapl/configuracao_impressao/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/sapl/configuracao_impressao/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/sapl/configuracao_impressao/apps.py b/sapl/configuracao_impressao/apps.py new file mode 100644 index 000000000..cf5c90f70 --- /dev/null +++ b/sapl/configuracao_impressao/apps.py @@ -0,0 +1,8 @@ +from django import apps +from django.utils.translation import ugettext_lazy as _ + + +class AppConfig(apps.AppConfig): + name = 'sapl.configuracao_impressao' + label = 'configuracao_impressao' + verbose_name = _('Configuração de Impressão') diff --git a/sapl/configuracao_impressao/forms.py b/sapl/configuracao_impressao/forms.py new file mode 100644 index 000000000..a5e86b5f8 --- /dev/null +++ b/sapl/configuracao_impressao/forms.py @@ -0,0 +1,8 @@ +from django import forms +from .models import ConfiguracaoImpressao + + +class ConfiguracaoImpressaoForm(forms.ModelForm): + class Meta: + model = ConfiguracaoImpressao + fields = '__all__' \ No newline at end of file diff --git a/sapl/configuracao_impressao/migrations/0001_initial.py b/sapl/configuracao_impressao/migrations/0001_initial.py new file mode 100644 index 000000000..447dd5633 --- /dev/null +++ b/sapl/configuracao_impressao/migrations/0001_initial.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2.28 on 2023-07-31 16:33 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ConfiguracaoImpressao', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identificador', models.CharField(help_text='Identificador único da configuração', max_length=100, unique=True, validators=[django.core.validators.RegexValidator('^[A-Z]+$', 'Digite apenas letras maiúsculas.')])), + ('nome', models.CharField(help_text='Nome da configuração de impressão', max_length=100)), + ('descricao', models.TextField(blank=True, help_text='Descrição da configuração de impressão')), + ('largura_pagina', models.PositiveIntegerField(default=800, help_text='Largura da página em pixels')), + ('altura_pagina', models.PositiveIntegerField(default=1200, help_text='Altura da página em pixels')), + ('margem_superior', models.PositiveIntegerField(default=20, help_text='Margem superior da página em pixels')), + ('margem_inferior', models.PositiveIntegerField(default=20, help_text='Margem inferior da página em pixels')), + ('margem_esquerda', models.PositiveIntegerField(default=20, help_text='Margem esquerda da página em pixels')), + ('margem_direita', models.PositiveIntegerField(default=20, help_text='Margem direita da página em pixels')), + ('cor_fundo', models.CharField(default='#FFFFFF', help_text='Cor de fundo da página em formato hexadecimal', max_length=7)), + ('tamanho_fonte', models.PositiveIntegerField(default=12, help_text='Tamanho padrão da fonte em pixels')), + ('cor_fonte', models.CharField(default='#000000', help_text='Cor padrão da fonte em formato hexadecimal', max_length=7)), + ('fonte', models.CharField(default='Arial', help_text='Família da fonte utilizada', max_length=100)), + ('espacamento_linhas', models.PositiveIntegerField(default=1, help_text='Espaçamento entre linhas em pixels')), + ], + ), + ] diff --git a/sapl/configuracao_impressao/migrations/0002_auto_20230731_1427.py b/sapl/configuracao_impressao/migrations/0002_auto_20230731_1427.py new file mode 100644 index 000000000..aadc1d137 --- /dev/null +++ b/sapl/configuracao_impressao/migrations/0002_auto_20230731_1427.py @@ -0,0 +1,49 @@ +# Generated by Django 2.2.28 on 2023-07-31 17:27 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('configuracao_impressao', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='configuracaoimpressao', + name='altura_pagina', + field=models.DecimalField(decimal_places=2, default=1200, help_text='Altura da página em pixels', max_digits=6), + ), + migrations.AlterField( + model_name='configuracaoimpressao', + name='identificador', + field=models.CharField(help_text='Identificador único da configuração', max_length=100, unique=True, validators=[django.core.validators.RegexValidator('^[A-Z0-9_-]+$', 'Digite apenas letras maiúsculas, números, underline (_) ou hífen (-).')]), + ), + migrations.AlterField( + model_name='configuracaoimpressao', + name='largura_pagina', + field=models.DecimalField(decimal_places=2, default=800, help_text='Largura da página em pixels', max_digits=6), + ), + migrations.AlterField( + model_name='configuracaoimpressao', + name='margem_direita', + field=models.DecimalField(decimal_places=2, default=20, help_text='Margem direita da página em pixels', max_digits=6), + ), + migrations.AlterField( + model_name='configuracaoimpressao', + name='margem_esquerda', + field=models.DecimalField(decimal_places=2, default=20, help_text='Margem esquerda da página em pixels', max_digits=6), + ), + migrations.AlterField( + model_name='configuracaoimpressao', + name='margem_inferior', + field=models.DecimalField(decimal_places=2, default=20, help_text='Margem inferior da página em pixels', max_digits=6), + ), + migrations.AlterField( + model_name='configuracaoimpressao', + name='margem_superior', + field=models.DecimalField(decimal_places=2, default=20, help_text='Margem superior da página em pixels', max_digits=6), + ), + ] diff --git a/sapl/configuracao_impressao/migrations/0003_auto_20230731_1429.py b/sapl/configuracao_impressao/migrations/0003_auto_20230731_1429.py new file mode 100644 index 000000000..5e480311d --- /dev/null +++ b/sapl/configuracao_impressao/migrations/0003_auto_20230731_1429.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.28 on 2023-07-31 17:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('configuracao_impressao', '0002_auto_20230731_1427'), + ] + + operations = [ + migrations.AlterField( + model_name='configuracaoimpressao', + name='espacamento_linhas', + field=models.DecimalField(decimal_places=2, default=1, help_text='Espaçamento entre linhas em pixels', max_digits=6), + ), + ] diff --git a/sapl/configuracao_impressao/migrations/__init__.py b/sapl/configuracao_impressao/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sapl/configuracao_impressao/models.py b/sapl/configuracao_impressao/models.py new file mode 100644 index 000000000..b9e8198cb --- /dev/null +++ b/sapl/configuracao_impressao/models.py @@ -0,0 +1,52 @@ +from django.core.validators import RegexValidator +from django.db import models + + +class ConfiguracaoImpressao(models.Model): + # Campo para ser o identificador único da configuração de impressão + identificador = models.CharField( + max_length=100, + unique=True, + help_text="Identificador único da configuração", + validators=[ + RegexValidator( + r'^[A-Z0-9_-]+$', + 'Digite apenas letras maiúsculas, números, underline (_) ou hífen (-).' + ) + ] + ) + + # Campos para a configuração da página de impressão + nome = models.CharField(max_length=100, help_text="Nome da configuração de impressão") + # Campo de descrição para que o usuário possa identificar a configuração + descricao = models.TextField(blank=True, help_text="Descrição da configuração de impressão") + largura_pagina = models.DecimalField(max_digits=6, decimal_places=2, default=800, + help_text="Largura da página em pixels") + altura_pagina = models.DecimalField(max_digits=6, decimal_places=2, default=1200, + help_text="Altura da página em pixels") + margem_superior = models.DecimalField(max_digits=6, decimal_places=2, default=20, + help_text="Margem superior da página em pixels") + margem_inferior = models.DecimalField(max_digits=6, decimal_places=2, default=20, + help_text="Margem inferior da página em pixels") + margem_esquerda = models.DecimalField(max_digits=6, decimal_places=2, default=20, + help_text="Margem esquerda da página em pixels") + margem_direita = models.DecimalField(max_digits=6, decimal_places=2, default=20, + help_text="Margem direita da página em pixels") + cor_fundo = models.CharField(max_length=7, default="#FFFFFF", + help_text="Cor de fundo da página em formato hexadecimal") + tamanho_fonte = models.PositiveIntegerField(default=12, + help_text="Tamanho padrão da fonte em pixels") + cor_fonte = models.CharField(max_length=7, default="#000000", + help_text="Cor padrão da fonte em formato hexadecimal") + fonte = models.CharField(max_length=100, default="Arial", + help_text="Família da fonte utilizada") + espacamento_linhas = models.DecimalField(max_digits=6, decimal_places=2, default=1, + help_text="Espaçamento entre linhas em pixels") + + def __str__(self): + return self.nome + + class Meta: + verbose_name = "Configuração de Impressão" + verbose_name_plural = "Configurações de Impressão" + ordering = ['identificador', 'nome'] diff --git a/sapl/configuracao_impressao/tests.py b/sapl/configuracao_impressao/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/sapl/configuracao_impressao/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/sapl/configuracao_impressao/urls.py b/sapl/configuracao_impressao/urls.py new file mode 100644 index 000000000..650a686e3 --- /dev/null +++ b/sapl/configuracao_impressao/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls import include, url +from sapl.configuracao_impressao.views import (ConfiguracaoImpressaoCrud) +from .apps import AppConfig + + +app_name = AppConfig.name +urlpatterns = [ + url(r'^configuracao_impressao/', include(ConfiguracaoImpressaoCrud.get_urls())), +] diff --git a/sapl/configuracao_impressao/views.py b/sapl/configuracao_impressao/views.py new file mode 100644 index 000000000..1e9d998ad --- /dev/null +++ b/sapl/configuracao_impressao/views.py @@ -0,0 +1,33 @@ +from django.shortcuts import render, get_object_or_404, redirect +from .models import ConfiguracaoImpressao +from .forms import ConfiguracaoImpressaoForm +from sapl.crud.base import Crud, MasterDetailCrud +import os + + +class ConfiguracaoImpressaoCrud(Crud): + model = ConfiguracaoImpressao + + class BaseMixin(Crud.BaseMixin): + list_field_names = ['identificador', 'nome', 'descricao'] + + class CreateView(Crud.CreateView): + form_class = ConfiguracaoImpressaoForm + + def form_valid(self, form): + return super(Crud.CreateView, self).form_valid(form) + + class UpdateView(Crud.UpdateView): + form_class = ConfiguracaoImpressaoForm + + def get_initial(self): + initial = super().get_initial() + initial['identificador'] = self.object.identificador + return initial + + class DetailView(Crud.DetailView): + layout_key = 'ConfiguracaoImpressaoDetail' + + class ListView(Crud.ListView): + paginate_by = None + ordering = ['identificador', 'nome'] diff --git a/sapl/settings.py b/sapl/settings.py index 5517e32f1..b1ae1dd43 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -63,7 +63,8 @@ SAPL_APPS = ( 'sapl.protocoloadm', 'sapl.compilacao', 'sapl.api', - 'sapl.rules' + 'sapl.rules', + 'sapl.configuracao_impressao', ) INSTALLED_APPS = ( diff --git a/sapl/templates/configuracao_impressao/layouts.yaml b/sapl/templates/configuracao_impressao/layouts.yaml new file mode 100644 index 000000000..3a4bc3b21 --- /dev/null +++ b/sapl/templates/configuracao_impressao/layouts.yaml @@ -0,0 +1,18 @@ +{% load i18n %} +ConfiguracaoImpressao: + {% trans 'Configuraçao de Impressao' %}: + - identificador nome + - descricao + - largura_pagina altura_pagina + - margem_superior margem_inferior margem_esquerda margem_direita + - cor_fundo tamanho_fonte cor_fonte + - fonte espacamento_linhas + +ConfiguracaoImpressaoDetail: + {% trans 'Configuraçao de Impressao' %}: + - identificador nome + - descricao + - largura_pagina altura_pagina + - margem_superior margem_inferior margem_esquerda margem_direita + - cor_fundo tamanho_fonte cor_fonte + - fonte espacamento_linhas \ No newline at end of file diff --git a/sapl/urls.py b/sapl/urls.py index 8cf280019..352b97db8 100644 --- a/sapl/urls.py +++ b/sapl/urls.py @@ -34,6 +34,7 @@ import sapl.parlamentares.urls import sapl.protocoloadm.urls import sapl.relatorios.urls import sapl.sessao.urls +import sapl.configuracao_impressao.urls urlpatterns = [] @@ -52,6 +53,7 @@ urlpatterns += [ url(r'', include(sapl.compilacao.urls)), url(r'', include(sapl.relatorios.urls)), url(r'', include(sapl.audiencia.urls)), + url(r'', include(sapl.configuracao_impressao.urls)), # name='sapl_index'), # must come at the end