mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-07-18 17:34:39 -05:00

* Initial implementation of consumption templates * Frontend implementation of consumption templates Testing * Support consumption template source * order templates, automatically add permissions * Support title assignment in consumption templates * Refactoring, filters to and, show sources on list Show sources on template list, update some translation strings Make filters and minor testing * Update strings * Only update django-multiselectfield * Basic docs, document some methods * Improve testing coverage, template multi-assignment merges
220 lines
8.2 KiB
Python
220 lines
8.2 KiB
Python
# Generated by Django 4.1.11 on 2023-09-16 18:04
|
|
|
|
import django.db.models.deletion
|
|
import multiselectfield.db.fields
|
|
from django.conf import settings
|
|
from django.contrib.auth.management import create_permissions
|
|
from django.contrib.auth.models import Group
|
|
from django.contrib.auth.models import Permission
|
|
from django.contrib.auth.models import User
|
|
from django.db import migrations
|
|
from django.db import models
|
|
from django.db.models import Q
|
|
|
|
|
|
def add_consumptiontemplate_permissions(apps, schema_editor):
|
|
# create permissions without waiting for post_migrate signal
|
|
for app_config in apps.get_app_configs():
|
|
app_config.models_module = True
|
|
create_permissions(app_config, apps=apps, verbosity=0)
|
|
app_config.models_module = None
|
|
|
|
add_permission = Permission.objects.get(codename="add_document")
|
|
consumptiontemplate_permissions = Permission.objects.filter(
|
|
codename__contains="consumptiontemplate",
|
|
)
|
|
|
|
for user in User.objects.filter(Q(user_permissions=add_permission)).distinct():
|
|
user.user_permissions.add(*consumptiontemplate_permissions)
|
|
|
|
for group in Group.objects.filter(Q(permissions=add_permission)).distinct():
|
|
group.permissions.add(*consumptiontemplate_permissions)
|
|
|
|
|
|
def remove_consumptiontemplate_permissions(apps, schema_editor):
|
|
consumptiontemplate_permissions = Permission.objects.filter(
|
|
codename__contains="consumptiontemplate",
|
|
)
|
|
|
|
for user in User.objects.all():
|
|
user.user_permissions.remove(*consumptiontemplate_permissions)
|
|
|
|
for group in Group.objects.all():
|
|
group.permissions.remove(*consumptiontemplate_permissions)
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
("auth", "0012_alter_user_first_name_max_length"),
|
|
("documents", "1038_sharelink"),
|
|
("paperless_mail", "0021_alter_mailaccount_password"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="ConsumptionTemplate",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.AutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"name",
|
|
models.CharField(max_length=256, unique=True, verbose_name="name"),
|
|
),
|
|
("order", models.IntegerField(default=0, verbose_name="order")),
|
|
(
|
|
"sources",
|
|
multiselectfield.db.fields.MultiSelectField(
|
|
choices=[
|
|
(1, "Consume Folder"),
|
|
(2, "Api Upload"),
|
|
(3, "Mail Fetch"),
|
|
],
|
|
default="1,2,3",
|
|
max_length=3,
|
|
),
|
|
),
|
|
(
|
|
"filter_path",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Only consume documents with a path that matches this if specified. Wildcards specified as * are allowed. Case insensitive.",
|
|
max_length=256,
|
|
null=True,
|
|
verbose_name="filter path",
|
|
),
|
|
),
|
|
(
|
|
"filter_filename",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive.",
|
|
max_length=256,
|
|
null=True,
|
|
verbose_name="filter filename",
|
|
),
|
|
),
|
|
(
|
|
"filter_mailrule",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to="paperless_mail.mailrule",
|
|
verbose_name="filter documents from this mail rule",
|
|
),
|
|
),
|
|
(
|
|
"assign_change_groups",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="+",
|
|
to="auth.group",
|
|
verbose_name="grant change permissions to these groups",
|
|
),
|
|
),
|
|
(
|
|
"assign_change_users",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="grant change permissions to these users",
|
|
),
|
|
),
|
|
(
|
|
"assign_correspondent",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to="documents.correspondent",
|
|
verbose_name="assign this correspondent",
|
|
),
|
|
),
|
|
(
|
|
"assign_document_type",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to="documents.documenttype",
|
|
verbose_name="assign this document type",
|
|
),
|
|
),
|
|
(
|
|
"assign_owner",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="assign this owner",
|
|
),
|
|
),
|
|
(
|
|
"assign_storage_path",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to="documents.storagepath",
|
|
verbose_name="assign this storage path",
|
|
),
|
|
),
|
|
(
|
|
"assign_tags",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
to="documents.tag",
|
|
verbose_name="assign this tag",
|
|
),
|
|
),
|
|
(
|
|
"assign_title",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Assign a document title, can include some placeholders, see documentation.",
|
|
max_length=256,
|
|
null=True,
|
|
verbose_name="assign title",
|
|
),
|
|
),
|
|
(
|
|
"assign_view_groups",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="+",
|
|
to="auth.group",
|
|
verbose_name="grant view permissions to these groups",
|
|
),
|
|
),
|
|
(
|
|
"assign_view_users",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="grant view permissions to these users",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "consumption template",
|
|
"verbose_name_plural": "consumption templates",
|
|
},
|
|
),
|
|
migrations.RunPython(
|
|
add_consumptiontemplate_permissions,
|
|
remove_consumptiontemplate_permissions,
|
|
),
|
|
]
|