mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Chore: Squash older automatic migrations (#7267)
This commit is contained in:
		| @@ -0,0 +1,178 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 17:52 | ||||||
|  |  | ||||||
|  | import django.db.models.deletion | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("documents", "0004_auto_20160114_1844"), | ||||||
|  |         ("documents", "0005_auto_20160123_0313"), | ||||||
|  |         ("documents", "0006_auto_20160123_0430"), | ||||||
|  |         ("documents", "0007_auto_20160126_2114"), | ||||||
|  |         ("documents", "0008_document_file_type"), | ||||||
|  |         ("documents", "0009_auto_20160214_0040"), | ||||||
|  |         ("documents", "0010_log"), | ||||||
|  |         ("documents", "0011_auto_20160303_1929"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("documents", "0003_sender"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="sender", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.sender", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="sender", | ||||||
|  |             options={"ordering": ("name",)}, | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="Tag", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("name", models.CharField(max_length=128, unique=True)), | ||||||
|  |                 ("slug", models.SlugField(blank=True)), | ||||||
|  |                 ( | ||||||
|  |                     "colour", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "#a6cee3"), | ||||||
|  |                             (2, "#1f78b4"), | ||||||
|  |                             (3, "#b2df8a"), | ||||||
|  |                             (4, "#33a02c"), | ||||||
|  |                             (5, "#fb9a99"), | ||||||
|  |                             (6, "#e31a1c"), | ||||||
|  |                             (7, "#fdbf6f"), | ||||||
|  |                             (8, "#ff7f00"), | ||||||
|  |                             (9, "#cab2d6"), | ||||||
|  |                             (10, "#6a3d9a"), | ||||||
|  |                             (11, "#b15928"), | ||||||
|  |                             (12, "#000000"), | ||||||
|  |                             (13, "#cccccc"), | ||||||
|  |                         ], | ||||||
|  |                         default=1, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("match", models.CharField(blank=True, max_length=256)), | ||||||
|  |                 ( | ||||||
|  |                     "matching_algorithm", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "Any"), | ||||||
|  |                             (2, "All"), | ||||||
|  |                             (3, "Literal"), | ||||||
|  |                             (4, "Regular Expression"), | ||||||
|  |                         ], | ||||||
|  |                         default=1, | ||||||
|  |                         help_text='Which algorithm you want to use when matching text to the OCR\'d PDF.  Here, "any" looks for any occurrence of any word provided in the PDF, while "all" requires that every word provided appear in the PDF, albeit not in the order provided.  A "literal" match means that the text you enter must appear in the PDF exactly as you\'ve entered it, and "regular expression" uses a regex to match the PDF.  If you don\'t know what a regex is, you probably don\'t want this option.', | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "abstract": False, | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="sender", | ||||||
|  |             name="slug", | ||||||
|  |             field=models.SlugField(blank=True), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="file_type", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 choices=[ | ||||||
|  |                     ("pdf", "PDF"), | ||||||
|  |                     ("png", "PNG"), | ||||||
|  |                     ("jpg", "JPG"), | ||||||
|  |                     ("gif", "GIF"), | ||||||
|  |                     ("tiff", "TIFF"), | ||||||
|  |                 ], | ||||||
|  |                 default="pdf", | ||||||
|  |                 editable=False, | ||||||
|  |                 max_length=4, | ||||||
|  |             ), | ||||||
|  |             preserve_default=False, | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="Log", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("group", models.UUIDField(blank=True)), | ||||||
|  |                 ("message", models.TextField()), | ||||||
|  |                 ( | ||||||
|  |                     "level", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (10, "Debugging"), | ||||||
|  |                             (20, "Informational"), | ||||||
|  |                             (30, "Warning"), | ||||||
|  |                             (40, "Error"), | ||||||
|  |                             (50, "Critical"), | ||||||
|  |                         ], | ||||||
|  |                         default=20, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "component", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[(1, "Consumer"), (2, "Mail Fetcher")], | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("created", models.DateTimeField(auto_now_add=True)), | ||||||
|  |                 ("modified", models.DateTimeField(auto_now=True)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("-modified",), | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.RenameModel( | ||||||
|  |             old_name="Sender", | ||||||
|  |             new_name="Correspondent", | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="document", | ||||||
|  |             options={"ordering": ("correspondent", "title")}, | ||||||
|  |         ), | ||||||
|  |         migrations.RenameField( | ||||||
|  |             model_name="document", | ||||||
|  |             old_name="sender", | ||||||
|  |             new_name="correspondent", | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,91 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 17:57 | ||||||
|  |  | ||||||
|  | import django.db.models.deletion | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("documents", "0015_add_insensitive_to_match"), | ||||||
|  |         ("documents", "0016_auto_20170325_1558"), | ||||||
|  |         ("documents", "0017_auto_20170512_0507"), | ||||||
|  |         ("documents", "0018_auto_20170715_1712"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("documents", "0014_document_checksum"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="checksum", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 editable=False, | ||||||
|  |                 help_text="The checksum of the original document (before it was encrypted).  We use this to prevent duplicate document imports.", | ||||||
|  |                 max_length=32, | ||||||
|  |                 unique=True, | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="is_insensitive", | ||||||
|  |             field=models.BooleanField(default=True), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="is_insensitive", | ||||||
|  |             field=models.BooleanField(default=True), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="content", | ||||||
|  |             field=models.TextField( | ||||||
|  |                 blank=True, | ||||||
|  |                 db_index=True, | ||||||
|  |                 help_text="The raw, text-only data of the document.  This field is primarily used for searching.", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Any"), | ||||||
|  |                     (2, "All"), | ||||||
|  |                     (3, "Literal"), | ||||||
|  |                     (4, "Regular Expression"), | ||||||
|  |                     (5, "Fuzzy Match"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 help_text='Which algorithm you want to use when matching text to the OCR\'d PDF.  Here, "any" looks for any occurrence of any word provided in the PDF, while "all" requires that every word provided appear in the PDF, albeit not in the order provided.  A "literal" match means that the text you enter must appear in the PDF exactly as you\'ve entered it, and "regular expression" uses a regex to match the PDF.  (If you don\'t know what a regex is, you probably don\'t want this option.)  Finally, a "fuzzy match" looks for words or phrases that are mostly—but not exactly—the same, which can be useful for matching against documents containing imperfections that foil accurate OCR.', | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Any"), | ||||||
|  |                     (2, "All"), | ||||||
|  |                     (3, "Literal"), | ||||||
|  |                     (4, "Regular Expression"), | ||||||
|  |                     (5, "Fuzzy Match"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 help_text='Which algorithm you want to use when matching text to the OCR\'d PDF.  Here, "any" looks for any occurrence of any word provided in the PDF, while "all" requires that every word provided appear in the PDF, albeit not in the order provided.  A "literal" match means that the text you enter must appear in the PDF exactly as you\'ve entered it, and "regular expression" uses a regex to match the PDF.  (If you don\'t know what a regex is, you probably don\'t want this option.)  Finally, a "fuzzy match" looks for words or phrases that are mostly—but not exactly—the same, which can be useful for matching against documents containing imperfections that foil accurate OCR.', | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="correspondent", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.correspondent", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,485 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 18:01 | ||||||
|  |  | ||||||
|  | import django.db.models.deletion | ||||||
|  | import django.utils.timezone | ||||||
|  | from django.conf import settings | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("documents", "1006_auto_20201208_2209"), | ||||||
|  |         ("documents", "1007_savedview_savedviewfilterrule"), | ||||||
|  |         ("documents", "1008_auto_20201216_1736"), | ||||||
|  |         ("documents", "1009_auto_20201216_2005"), | ||||||
|  |         ("documents", "1010_auto_20210101_2159"), | ||||||
|  |         ("documents", "1011_auto_20210101_2340"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("documents", "1005_checksums"), | ||||||
|  |         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.RemoveField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="slug", | ||||||
|  |         ), | ||||||
|  |         migrations.RemoveField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="slug", | ||||||
|  |         ), | ||||||
|  |         migrations.RemoveField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="slug", | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="SavedView", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("name", models.CharField(max_length=128, verbose_name="name")), | ||||||
|  |                 ( | ||||||
|  |                     "show_on_dashboard", | ||||||
|  |                     models.BooleanField(verbose_name="show on dashboard"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "show_in_sidebar", | ||||||
|  |                     models.BooleanField(verbose_name="show in sidebar"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "sort_field", | ||||||
|  |                     models.CharField(max_length=128, verbose_name="sort field"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "sort_reverse", | ||||||
|  |                     models.BooleanField(default=False, verbose_name="sort reverse"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "user", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         to=settings.AUTH_USER_MODEL, | ||||||
|  |                         verbose_name="user", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("name",), | ||||||
|  |                 "verbose_name": "saved view", | ||||||
|  |                 "verbose_name_plural": "saved views", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="correspondent", | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("name",), | ||||||
|  |                 "verbose_name": "correspondent", | ||||||
|  |                 "verbose_name_plural": "correspondents", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="document", | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("-created",), | ||||||
|  |                 "verbose_name": "document", | ||||||
|  |                 "verbose_name_plural": "documents", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="documenttype", | ||||||
|  |             options={ | ||||||
|  |                 "verbose_name": "document type", | ||||||
|  |                 "verbose_name_plural": "document types", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="log", | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("-created",), | ||||||
|  |                 "verbose_name": "log", | ||||||
|  |                 "verbose_name_plural": "logs", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="tag", | ||||||
|  |             options={"verbose_name": "tag", "verbose_name_plural": "tags"}, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="is_insensitive", | ||||||
|  |             field=models.BooleanField(default=True, verbose_name="is insensitive"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="match", | ||||||
|  |             field=models.CharField(blank=True, max_length=256, verbose_name="match"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, unique=True, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="added", | ||||||
|  |             field=models.DateTimeField( | ||||||
|  |                 db_index=True, | ||||||
|  |                 default=django.utils.timezone.now, | ||||||
|  |                 editable=False, | ||||||
|  |                 verbose_name="added", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="archive_checksum", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 editable=False, | ||||||
|  |                 help_text="The checksum of the archived document.", | ||||||
|  |                 max_length=32, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="archive checksum", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="archive_serial_number", | ||||||
|  |             field=models.IntegerField( | ||||||
|  |                 blank=True, | ||||||
|  |                 db_index=True, | ||||||
|  |                 help_text="The position of this document in your physical document archive.", | ||||||
|  |                 null=True, | ||||||
|  |                 unique=True, | ||||||
|  |                 verbose_name="archive serial number", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="checksum", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 editable=False, | ||||||
|  |                 help_text="The checksum of the original document.", | ||||||
|  |                 max_length=32, | ||||||
|  |                 unique=True, | ||||||
|  |                 verbose_name="checksum", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="content", | ||||||
|  |             field=models.TextField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="The raw, text-only data of the document. This field is primarily used for searching.", | ||||||
|  |                 verbose_name="content", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="correspondent", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.correspondent", | ||||||
|  |                 verbose_name="correspondent", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="created", | ||||||
|  |             field=models.DateTimeField( | ||||||
|  |                 db_index=True, | ||||||
|  |                 default=django.utils.timezone.now, | ||||||
|  |                 verbose_name="created", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="document_type", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.documenttype", | ||||||
|  |                 verbose_name="document type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="filename", | ||||||
|  |             field=models.FilePathField( | ||||||
|  |                 default=None, | ||||||
|  |                 editable=False, | ||||||
|  |                 help_text="Current filename in storage", | ||||||
|  |                 max_length=1024, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="filename", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="mime_type", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 editable=False, | ||||||
|  |                 max_length=256, | ||||||
|  |                 verbose_name="mime type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="modified", | ||||||
|  |             field=models.DateTimeField( | ||||||
|  |                 auto_now=True, | ||||||
|  |                 db_index=True, | ||||||
|  |                 verbose_name="modified", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="storage_type", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 choices=[ | ||||||
|  |                     ("unencrypted", "Unencrypted"), | ||||||
|  |                     ("gpg", "Encrypted with GNU Privacy Guard"), | ||||||
|  |                 ], | ||||||
|  |                 default="unencrypted", | ||||||
|  |                 editable=False, | ||||||
|  |                 max_length=11, | ||||||
|  |                 verbose_name="storage type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.tag", | ||||||
|  |                 verbose_name="tags", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="title", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 db_index=True, | ||||||
|  |                 max_length=128, | ||||||
|  |                 verbose_name="title", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="is_insensitive", | ||||||
|  |             field=models.BooleanField(default=True, verbose_name="is insensitive"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="match", | ||||||
|  |             field=models.CharField(blank=True, max_length=256, verbose_name="match"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, unique=True, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="log", | ||||||
|  |             name="created", | ||||||
|  |             field=models.DateTimeField(auto_now_add=True, verbose_name="created"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="log", | ||||||
|  |             name="group", | ||||||
|  |             field=models.UUIDField(blank=True, null=True, verbose_name="group"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="log", | ||||||
|  |             name="level", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (10, "debug"), | ||||||
|  |                     (20, "information"), | ||||||
|  |                     (30, "warning"), | ||||||
|  |                     (40, "error"), | ||||||
|  |                     (50, "critical"), | ||||||
|  |                 ], | ||||||
|  |                 default=20, | ||||||
|  |                 verbose_name="level", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="log", | ||||||
|  |             name="message", | ||||||
|  |             field=models.TextField(verbose_name="message"), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="SavedViewFilterRule", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "rule_type", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (0, "title contains"), | ||||||
|  |                             (1, "content contains"), | ||||||
|  |                             (2, "ASN is"), | ||||||
|  |                             (3, "correspondent is"), | ||||||
|  |                             (4, "document type is"), | ||||||
|  |                             (5, "is in inbox"), | ||||||
|  |                             (6, "has tag"), | ||||||
|  |                             (7, "has any tag"), | ||||||
|  |                             (8, "created before"), | ||||||
|  |                             (9, "created after"), | ||||||
|  |                             (10, "created year is"), | ||||||
|  |                             (11, "created month is"), | ||||||
|  |                             (12, "created day is"), | ||||||
|  |                             (13, "added before"), | ||||||
|  |                             (14, "added after"), | ||||||
|  |                             (15, "modified before"), | ||||||
|  |                             (16, "modified after"), | ||||||
|  |                             (17, "does not have tag"), | ||||||
|  |                         ], | ||||||
|  |                         verbose_name="rule type", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "value", | ||||||
|  |                     models.CharField( | ||||||
|  |                         blank=True, | ||||||
|  |                         max_length=128, | ||||||
|  |                         null=True, | ||||||
|  |                         verbose_name="value", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "saved_view", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         related_name="filter_rules", | ||||||
|  |                         to="documents.savedview", | ||||||
|  |                         verbose_name="saved view", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "verbose_name": "filter rule", | ||||||
|  |                 "verbose_name_plural": "filter rules", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="colour", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "#a6cee3"), | ||||||
|  |                     (2, "#1f78b4"), | ||||||
|  |                     (3, "#b2df8a"), | ||||||
|  |                     (4, "#33a02c"), | ||||||
|  |                     (5, "#fb9a99"), | ||||||
|  |                     (6, "#e31a1c"), | ||||||
|  |                     (7, "#fdbf6f"), | ||||||
|  |                     (8, "#ff7f00"), | ||||||
|  |                     (9, "#cab2d6"), | ||||||
|  |                     (10, "#6a3d9a"), | ||||||
|  |                     (11, "#b15928"), | ||||||
|  |                     (12, "#000000"), | ||||||
|  |                     (13, "#cccccc"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="color", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="is_inbox_tag", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 help_text="Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags.", | ||||||
|  |                 verbose_name="is inbox tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="is_insensitive", | ||||||
|  |             field=models.BooleanField(default=True, verbose_name="is insensitive"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="match", | ||||||
|  |             field=models.CharField(blank=True, max_length=256, verbose_name="match"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, unique=True, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,190 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 18:09 | ||||||
|  |  | ||||||
|  | import django.db.models.deletion | ||||||
|  | from django.conf import settings | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("documents", "1016_auto_20210317_1351"), | ||||||
|  |         ("documents", "1017_alter_savedviewfilterrule_rule_type"), | ||||||
|  |         ("documents", "1018_alter_savedviewfilterrule_value"), | ||||||
|  |         ("documents", "1019_uisettings"), | ||||||
|  |         ("documents", "1019_storagepath_document_storage_path"), | ||||||
|  |         ("documents", "1020_merge_20220518_1839"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||||
|  |         ("documents", "1015_remove_null_characters"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedview", | ||||||
|  |             name="sort_field", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 max_length=128, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="sort field", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="rule_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "title contains"), | ||||||
|  |                     (1, "content contains"), | ||||||
|  |                     (2, "ASN is"), | ||||||
|  |                     (3, "correspondent is"), | ||||||
|  |                     (4, "document type is"), | ||||||
|  |                     (5, "is in inbox"), | ||||||
|  |                     (6, "has tag"), | ||||||
|  |                     (7, "has any tag"), | ||||||
|  |                     (8, "created before"), | ||||||
|  |                     (9, "created after"), | ||||||
|  |                     (10, "created year is"), | ||||||
|  |                     (11, "created month is"), | ||||||
|  |                     (12, "created day is"), | ||||||
|  |                     (13, "added before"), | ||||||
|  |                     (14, "added after"), | ||||||
|  |                     (15, "modified before"), | ||||||
|  |                     (16, "modified after"), | ||||||
|  |                     (17, "does not have tag"), | ||||||
|  |                     (18, "does not have ASN"), | ||||||
|  |                     (19, "title or content contains"), | ||||||
|  |                     (20, "fulltext query"), | ||||||
|  |                     (21, "more like this"), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="rule type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="rule_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "title contains"), | ||||||
|  |                     (1, "content contains"), | ||||||
|  |                     (2, "ASN is"), | ||||||
|  |                     (3, "correspondent is"), | ||||||
|  |                     (4, "document type is"), | ||||||
|  |                     (5, "is in inbox"), | ||||||
|  |                     (6, "has tag"), | ||||||
|  |                     (7, "has any tag"), | ||||||
|  |                     (8, "created before"), | ||||||
|  |                     (9, "created after"), | ||||||
|  |                     (10, "created year is"), | ||||||
|  |                     (11, "created month is"), | ||||||
|  |                     (12, "created day is"), | ||||||
|  |                     (13, "added before"), | ||||||
|  |                     (14, "added after"), | ||||||
|  |                     (15, "modified before"), | ||||||
|  |                     (16, "modified after"), | ||||||
|  |                     (17, "does not have tag"), | ||||||
|  |                     (18, "does not have ASN"), | ||||||
|  |                     (19, "title or content contains"), | ||||||
|  |                     (20, "fulltext query"), | ||||||
|  |                     (21, "more like this"), | ||||||
|  |                     (22, "has tags in"), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="rule type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="value", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="value", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="UiSettings", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("settings", models.JSONField(null=True)), | ||||||
|  |                 ( | ||||||
|  |                     "user", | ||||||
|  |                     models.OneToOneField( | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         related_name="ui_settings", | ||||||
|  |                         to=settings.AUTH_USER_MODEL, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="StoragePath", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "name", | ||||||
|  |                     models.CharField(max_length=128, unique=True, verbose_name="name"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "match", | ||||||
|  |                     models.CharField(blank=True, max_length=256, verbose_name="match"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "matching_algorithm", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "Any word"), | ||||||
|  |                             (2, "All words"), | ||||||
|  |                             (3, "Exact match"), | ||||||
|  |                             (4, "Regular expression"), | ||||||
|  |                             (5, "Fuzzy word"), | ||||||
|  |                             (6, "Automatic"), | ||||||
|  |                         ], | ||||||
|  |                         default=1, | ||||||
|  |                         verbose_name="matching algorithm", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "is_insensitive", | ||||||
|  |                     models.BooleanField(default=True, verbose_name="is insensitive"), | ||||||
|  |                 ), | ||||||
|  |                 ("path", models.CharField(max_length=512, verbose_name="path")), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "verbose_name": "storage path", | ||||||
|  |                 "verbose_name_plural": "storage paths", | ||||||
|  |                 "ordering": ("name",), | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="storage_path", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="documents", | ||||||
|  |                 to="documents.storagepath", | ||||||
|  |                 verbose_name="storage path", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,668 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 18:10 | ||||||
|  |  | ||||||
|  | import django.core.validators | ||||||
|  | import django.db.models.deletion | ||||||
|  | import django.utils.timezone | ||||||
|  | from django.conf import settings | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("documents", "1022_paperlesstask"), | ||||||
|  |         ("documents", "1023_add_comments"), | ||||||
|  |         ("documents", "1024_document_original_filename"), | ||||||
|  |         ("documents", "1025_alter_savedviewfilterrule_rule_type"), | ||||||
|  |         ("documents", "1026_transition_to_celery"), | ||||||
|  |         ("documents", "1027_remove_paperlesstask_attempted_task_and_more"), | ||||||
|  |         ("documents", "1028_remove_paperlesstask_task_args_and_more"), | ||||||
|  |         ("documents", "1029_alter_document_archive_serial_number"), | ||||||
|  |         ("documents", "1030_alter_paperlesstask_task_file_name"), | ||||||
|  |         ("documents", "1031_remove_savedview_user_correspondent_owner_and_more"), | ||||||
|  |         ("documents", "1032_alter_correspondent_matching_algorithm_and_more"), | ||||||
|  |         ("documents", "1033_alter_documenttype_options_alter_tag_options_and_more"), | ||||||
|  |         ("documents", "1034_alter_savedviewfilterrule_rule_type"), | ||||||
|  |         ("documents", "1035_rename_comment_note"), | ||||||
|  |         ("documents", "1036_alter_savedviewfilterrule_rule_type"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||||
|  |         ("django_celery_results", "0011_taskresult_periodic_task_name"), | ||||||
|  |         ("documents", "1021_webp_thumbnail_conversion"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="Comment", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "comment", | ||||||
|  |                     models.TextField( | ||||||
|  |                         blank=True, | ||||||
|  |                         help_text="Comment for the document", | ||||||
|  |                         verbose_name="content", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "created", | ||||||
|  |                     models.DateTimeField( | ||||||
|  |                         db_index=True, | ||||||
|  |                         default=django.utils.timezone.now, | ||||||
|  |                         verbose_name="created", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "document", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         related_name="documents", | ||||||
|  |                         to="documents.document", | ||||||
|  |                         verbose_name="document", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "user", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                         related_name="users", | ||||||
|  |                         to=settings.AUTH_USER_MODEL, | ||||||
|  |                         verbose_name="user", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "verbose_name": "comment", | ||||||
|  |                 "verbose_name_plural": "comments", | ||||||
|  |                 "ordering": ("created",), | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="original_filename", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 default=None, | ||||||
|  |                 editable=False, | ||||||
|  |                 help_text="The original name of the file when it was uploaded", | ||||||
|  |                 max_length=1024, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="original filename", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="rule_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "title contains"), | ||||||
|  |                     (1, "content contains"), | ||||||
|  |                     (2, "ASN is"), | ||||||
|  |                     (3, "correspondent is"), | ||||||
|  |                     (4, "document type is"), | ||||||
|  |                     (5, "is in inbox"), | ||||||
|  |                     (6, "has tag"), | ||||||
|  |                     (7, "has any tag"), | ||||||
|  |                     (8, "created before"), | ||||||
|  |                     (9, "created after"), | ||||||
|  |                     (10, "created year is"), | ||||||
|  |                     (11, "created month is"), | ||||||
|  |                     (12, "created day is"), | ||||||
|  |                     (13, "added before"), | ||||||
|  |                     (14, "added after"), | ||||||
|  |                     (15, "modified before"), | ||||||
|  |                     (16, "modified after"), | ||||||
|  |                     (17, "does not have tag"), | ||||||
|  |                     (18, "does not have ASN"), | ||||||
|  |                     (19, "title or content contains"), | ||||||
|  |                     (20, "fulltext query"), | ||||||
|  |                     (21, "more like this"), | ||||||
|  |                     (22, "has tags in"), | ||||||
|  |                     (23, "ASN greater than"), | ||||||
|  |                     (24, "ASN less than"), | ||||||
|  |                     (25, "storage path is"), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="rule type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="PaperlessTask", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("task_id", models.CharField(max_length=128)), | ||||||
|  |                 ("acknowledged", models.BooleanField(default=False)), | ||||||
|  |                 ( | ||||||
|  |                     "attempted_task", | ||||||
|  |                     models.OneToOneField( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         related_name="attempted_task", | ||||||
|  |                         to="django_celery_results.taskresult", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |         migrations.RunSQL( | ||||||
|  |             sql="DROP TABLE IF EXISTS django_q_ormq", | ||||||
|  |             reverse_sql="", | ||||||
|  |         ), | ||||||
|  |         migrations.RunSQL( | ||||||
|  |             sql="DROP TABLE IF EXISTS django_q_schedule", | ||||||
|  |             reverse_sql="", | ||||||
|  |         ), | ||||||
|  |         migrations.RunSQL( | ||||||
|  |             sql="DROP TABLE IF EXISTS django_q_task", | ||||||
|  |             reverse_sql="", | ||||||
|  |         ), | ||||||
|  |         migrations.RemoveField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="attempted_task", | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="date_created", | ||||||
|  |             field=models.DateTimeField( | ||||||
|  |                 default=django.utils.timezone.now, | ||||||
|  |                 help_text="Datetime field when the task result was created in UTC", | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Created DateTime", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="date_done", | ||||||
|  |             field=models.DateTimeField( | ||||||
|  |                 default=None, | ||||||
|  |                 help_text="Datetime field when the task was completed in UTC", | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Completed DateTime", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="date_started", | ||||||
|  |             field=models.DateTimeField( | ||||||
|  |                 default=None, | ||||||
|  |                 help_text="Datetime field when the task was started in UTC", | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Started DateTime", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="result", | ||||||
|  |             field=models.TextField( | ||||||
|  |                 default=None, | ||||||
|  |                 help_text="The data returned by the task", | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Result Data", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="status", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 choices=[ | ||||||
|  |                     ("FAILURE", "FAILURE"), | ||||||
|  |                     ("PENDING", "PENDING"), | ||||||
|  |                     ("RECEIVED", "RECEIVED"), | ||||||
|  |                     ("RETRY", "RETRY"), | ||||||
|  |                     ("REVOKED", "REVOKED"), | ||||||
|  |                     ("STARTED", "STARTED"), | ||||||
|  |                     ("SUCCESS", "SUCCESS"), | ||||||
|  |                 ], | ||||||
|  |                 default="PENDING", | ||||||
|  |                 help_text="Current state of the task being run", | ||||||
|  |                 max_length=30, | ||||||
|  |                 verbose_name="Task State", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="task_name", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="Name of the Task which was run", | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Task Name", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="acknowledged", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 help_text="If the task is acknowledged via the frontend or API", | ||||||
|  |                 verbose_name="Acknowledged", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="task_id", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="Celery ID for the Task that was run", | ||||||
|  |                 max_length=255, | ||||||
|  |                 unique=True, | ||||||
|  |                 verbose_name="Task ID", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="archive_serial_number", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 blank=True, | ||||||
|  |                 db_index=True, | ||||||
|  |                 help_text="The position of this document in your physical document archive.", | ||||||
|  |                 null=True, | ||||||
|  |                 unique=True, | ||||||
|  |                 validators=[ | ||||||
|  |                     django.core.validators.MaxValueValidator(4294967295), | ||||||
|  |                     django.core.validators.MinValueValidator(0), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="archive serial number", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="paperlesstask", | ||||||
|  |             name="task_file_name", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 help_text="Name of the file which the Task was run for", | ||||||
|  |                 max_length=255, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Task Filename", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.RenameField( | ||||||
|  |             model_name="savedview", | ||||||
|  |             old_name="user", | ||||||
|  |             new_name="owner", | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedview", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="storagepath", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "None"), | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "None"), | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="storagepath", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "None"), | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="matching_algorithm", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "None"), | ||||||
|  |                     (1, "Any word"), | ||||||
|  |                     (2, "All words"), | ||||||
|  |                     (3, "Exact match"), | ||||||
|  |                     (4, "Regular expression"), | ||||||
|  |                     (5, "Fuzzy word"), | ||||||
|  |                     (6, "Automatic"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="matching algorithm", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="documenttype", | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("name",), | ||||||
|  |                 "verbose_name": "document type", | ||||||
|  |                 "verbose_name_plural": "document types", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="tag", | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("name",), | ||||||
|  |                 "verbose_name": "tag", | ||||||
|  |                 "verbose_name_plural": "tags", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="storagepath", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="tag", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=128, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 fields=("name", "owner"), | ||||||
|  |                 name="documents_correspondent_unique_name_owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="correspondent", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 condition=models.Q(("owner__isnull", True)), | ||||||
|  |                 fields=("name",), | ||||||
|  |                 name="documents_correspondent_name_uniq", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 fields=("name", "owner"), | ||||||
|  |                 name="documents_documenttype_unique_name_owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="documenttype", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 condition=models.Q(("owner__isnull", True)), | ||||||
|  |                 fields=("name",), | ||||||
|  |                 name="documents_documenttype_name_uniq", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="storagepath", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 fields=("name", "owner"), | ||||||
|  |                 name="documents_storagepath_unique_name_owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="storagepath", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 condition=models.Q(("owner__isnull", True)), | ||||||
|  |                 fields=("name",), | ||||||
|  |                 name="documents_storagepath_name_uniq", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="tag", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 fields=("name", "owner"), | ||||||
|  |                 name="documents_tag_unique_name_owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="tag", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 condition=models.Q(("owner__isnull", True)), | ||||||
|  |                 fields=("name",), | ||||||
|  |                 name="documents_tag_name_uniq", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="rule_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "title contains"), | ||||||
|  |                     (1, "content contains"), | ||||||
|  |                     (2, "ASN is"), | ||||||
|  |                     (3, "correspondent is"), | ||||||
|  |                     (4, "document type is"), | ||||||
|  |                     (5, "is in inbox"), | ||||||
|  |                     (6, "has tag"), | ||||||
|  |                     (7, "has any tag"), | ||||||
|  |                     (8, "created before"), | ||||||
|  |                     (9, "created after"), | ||||||
|  |                     (10, "created year is"), | ||||||
|  |                     (11, "created month is"), | ||||||
|  |                     (12, "created day is"), | ||||||
|  |                     (13, "added before"), | ||||||
|  |                     (14, "added after"), | ||||||
|  |                     (15, "modified before"), | ||||||
|  |                     (16, "modified after"), | ||||||
|  |                     (17, "does not have tag"), | ||||||
|  |                     (18, "does not have ASN"), | ||||||
|  |                     (19, "title or content contains"), | ||||||
|  |                     (20, "fulltext query"), | ||||||
|  |                     (21, "more like this"), | ||||||
|  |                     (22, "has tags in"), | ||||||
|  |                     (23, "ASN greater than"), | ||||||
|  |                     (24, "ASN less than"), | ||||||
|  |                     (25, "storage path is"), | ||||||
|  |                     (26, "has correspondent in"), | ||||||
|  |                     (27, "does not have correspondent in"), | ||||||
|  |                     (28, "has document type in"), | ||||||
|  |                     (29, "does not have document type in"), | ||||||
|  |                     (30, "has storage path in"), | ||||||
|  |                     (31, "does not have storage path in"), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="rule type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.RenameModel( | ||||||
|  |             old_name="Comment", | ||||||
|  |             new_name="Note", | ||||||
|  |         ), | ||||||
|  |         migrations.RenameField( | ||||||
|  |             model_name="note", | ||||||
|  |             old_name="comment", | ||||||
|  |             new_name="note", | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="note", | ||||||
|  |             options={ | ||||||
|  |                 "ordering": ("created",), | ||||||
|  |                 "verbose_name": "note", | ||||||
|  |                 "verbose_name_plural": "notes", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="note", | ||||||
|  |             name="document", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                 related_name="notes", | ||||||
|  |                 to="documents.document", | ||||||
|  |                 verbose_name="document", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="note", | ||||||
|  |             name="note", | ||||||
|  |             field=models.TextField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="Note for the document", | ||||||
|  |                 verbose_name="content", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="note", | ||||||
|  |             name="user", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="notes", | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="user", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="rule_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "title contains"), | ||||||
|  |                     (1, "content contains"), | ||||||
|  |                     (2, "ASN is"), | ||||||
|  |                     (3, "correspondent is"), | ||||||
|  |                     (4, "document type is"), | ||||||
|  |                     (5, "is in inbox"), | ||||||
|  |                     (6, "has tag"), | ||||||
|  |                     (7, "has any tag"), | ||||||
|  |                     (8, "created before"), | ||||||
|  |                     (9, "created after"), | ||||||
|  |                     (10, "created year is"), | ||||||
|  |                     (11, "created month is"), | ||||||
|  |                     (12, "created day is"), | ||||||
|  |                     (13, "added before"), | ||||||
|  |                     (14, "added after"), | ||||||
|  |                     (15, "modified before"), | ||||||
|  |                     (16, "modified after"), | ||||||
|  |                     (17, "does not have tag"), | ||||||
|  |                     (18, "does not have ASN"), | ||||||
|  |                     (19, "title or content contains"), | ||||||
|  |                     (20, "fulltext query"), | ||||||
|  |                     (21, "more like this"), | ||||||
|  |                     (22, "has tags in"), | ||||||
|  |                     (23, "ASN greater than"), | ||||||
|  |                     (24, "ASN less than"), | ||||||
|  |                     (25, "storage path is"), | ||||||
|  |                     (26, "has correspondent in"), | ||||||
|  |                     (27, "does not have correspondent in"), | ||||||
|  |                     (28, "has document type in"), | ||||||
|  |                     (29, "does not have document type in"), | ||||||
|  |                     (30, "has storage path in"), | ||||||
|  |                     (31, "does not have storage path in"), | ||||||
|  |                     (32, "owner is"), | ||||||
|  |                     (33, "has owner in"), | ||||||
|  |                     (34, "does not have owner"), | ||||||
|  |                     (35, "does not have owner in"), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="rule type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,331 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 19:39 | ||||||
|  |  | ||||||
|  | import django.core.validators | ||||||
|  | import django.db.models.deletion | ||||||
|  | from django.conf import settings | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("documents", "1045_alter_customfieldinstance_value_monetary"), | ||||||
|  |         ("documents", "1046_workflowaction_remove_all_correspondents_and_more"), | ||||||
|  |         ("documents", "1047_savedview_display_mode_and_more"), | ||||||
|  |         ("documents", "1048_alter_savedviewfilterrule_rule_type"), | ||||||
|  |         ("documents", "1049_document_deleted_at_document_restored_at"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("documents", "1044_workflow_workflowaction_workflowtrigger_and_more"), | ||||||
|  |         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||||
|  |         ("auth", "0012_alter_user_first_name_max_length"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="customfieldinstance", | ||||||
|  |             name="value_monetary", | ||||||
|  |             field=models.CharField(max_length=128, null=True), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_correspondents", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 verbose_name="remove all correspondents", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_custom_fields", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 verbose_name="remove all custom fields", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_document_types", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 verbose_name="remove all document types", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_owners", | ||||||
|  |             field=models.BooleanField(default=False, verbose_name="remove all owners"), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_permissions", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 verbose_name="remove all permissions", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_storage_paths", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 verbose_name="remove all storage paths", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_all_tags", | ||||||
|  |             field=models.BooleanField(default=False, verbose_name="remove all tags"), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_change_groups", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="auth.group", | ||||||
|  |                 verbose_name="remove change permissions for these groups", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_change_users", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="remove change permissions for these users", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_correspondents", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.correspondent", | ||||||
|  |                 verbose_name="remove these correspondent(s)", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_custom_fields", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.customfield", | ||||||
|  |                 verbose_name="remove these custom fields", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_document_types", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.documenttype", | ||||||
|  |                 verbose_name="remove these document type(s)", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_owners", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="remove these owner(s)", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_storage_paths", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.storagepath", | ||||||
|  |                 verbose_name="remove these storage path(s)", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.tag", | ||||||
|  |                 verbose_name="remove these tag(s)", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_view_groups", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="auth.group", | ||||||
|  |                 verbose_name="remove view permissions for these groups", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="remove_view_users", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="remove view permissions for these users", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="assign_correspondent", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.correspondent", | ||||||
|  |                 verbose_name="assign this correspondent", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="assign_document_type", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.documenttype", | ||||||
|  |                 verbose_name="assign this document type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="assign_storage_path", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.storagepath", | ||||||
|  |                 verbose_name="assign this storage path", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="assign_tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="+", | ||||||
|  |                 to="documents.tag", | ||||||
|  |                 verbose_name="assign this tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="workflowaction", | ||||||
|  |             name="type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[(1, "Assignment"), (2, "Removal")], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="Workflow Action Type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="savedview", | ||||||
|  |             name="display_mode", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 choices=[ | ||||||
|  |                     ("table", "Table"), | ||||||
|  |                     ("smallCards", "Small Cards"), | ||||||
|  |                     ("largeCards", "Large Cards"), | ||||||
|  |                 ], | ||||||
|  |                 max_length=128, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="View display mode", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="savedview", | ||||||
|  |             name="page_size", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 validators=[django.core.validators.MinValueValidator(1)], | ||||||
|  |                 verbose_name="View page size", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="savedview", | ||||||
|  |             name="display_fields", | ||||||
|  |             field=models.JSONField( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="Document display fields", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="savedviewfilterrule", | ||||||
|  |             name="rule_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (0, "title contains"), | ||||||
|  |                     (1, "content contains"), | ||||||
|  |                     (2, "ASN is"), | ||||||
|  |                     (3, "correspondent is"), | ||||||
|  |                     (4, "document type is"), | ||||||
|  |                     (5, "is in inbox"), | ||||||
|  |                     (6, "has tag"), | ||||||
|  |                     (7, "has any tag"), | ||||||
|  |                     (8, "created before"), | ||||||
|  |                     (9, "created after"), | ||||||
|  |                     (10, "created year is"), | ||||||
|  |                     (11, "created month is"), | ||||||
|  |                     (12, "created day is"), | ||||||
|  |                     (13, "added before"), | ||||||
|  |                     (14, "added after"), | ||||||
|  |                     (15, "modified before"), | ||||||
|  |                     (16, "modified after"), | ||||||
|  |                     (17, "does not have tag"), | ||||||
|  |                     (18, "does not have ASN"), | ||||||
|  |                     (19, "title or content contains"), | ||||||
|  |                     (20, "fulltext query"), | ||||||
|  |                     (21, "more like this"), | ||||||
|  |                     (22, "has tags in"), | ||||||
|  |                     (23, "ASN greater than"), | ||||||
|  |                     (24, "ASN less than"), | ||||||
|  |                     (25, "storage path is"), | ||||||
|  |                     (26, "has correspondent in"), | ||||||
|  |                     (27, "does not have correspondent in"), | ||||||
|  |                     (28, "has document type in"), | ||||||
|  |                     (29, "does not have document type in"), | ||||||
|  |                     (30, "has storage path in"), | ||||||
|  |                     (31, "does not have storage path in"), | ||||||
|  |                     (32, "owner is"), | ||||||
|  |                     (33, "has owner in"), | ||||||
|  |                     (34, "does not have owner"), | ||||||
|  |                     (35, "does not have owner in"), | ||||||
|  |                     (36, "has custom field value"), | ||||||
|  |                     (37, "is shared by me"), | ||||||
|  |                     (38, "has custom fields"), | ||||||
|  |                     (39, "has custom field in"), | ||||||
|  |                     (40, "does not have custom field in"), | ||||||
|  |                     (41, "does not have custom field"), | ||||||
|  |                 ], | ||||||
|  |                 verbose_name="rule type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="deleted_at", | ||||||
|  |             field=models.DateTimeField(blank=True, null=True), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="document", | ||||||
|  |             name="restored_at", | ||||||
|  |             field=models.DateTimeField(blank=True, null=True), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -120,7 +120,7 @@ simple_png2 = os.path.join(os.path.dirname(__file__), "examples", "no-text.png") | |||||||
|  |  | ||||||
| @override_settings(FILENAME_FORMAT="") | @override_settings(FILENAME_FORMAT="") | ||||||
| class TestMigrateArchiveFiles(DirectoriesMixin, FileSystemAssertsMixin, TestMigrations): | class TestMigrateArchiveFiles(DirectoriesMixin, FileSystemAssertsMixin, TestMigrations): | ||||||
|     migrate_from = "1011_auto_20210101_2340" |     migrate_from = "1006_auto_20201208_2209_squashed_1011_auto_20210101_2340" | ||||||
|     migrate_to = "1012_fix_archive_files" |     migrate_to = "1012_fix_archive_files" | ||||||
|  |  | ||||||
|     def setUpBeforeMigration(self, apps): |     def setUpBeforeMigration(self, apps): | ||||||
| @@ -287,7 +287,7 @@ def fake_parse_wrapper(parser, path, mime_type, file_name): | |||||||
|  |  | ||||||
| @override_settings(FILENAME_FORMAT="") | @override_settings(FILENAME_FORMAT="") | ||||||
| class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations): | class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations): | ||||||
|     migrate_from = "1011_auto_20210101_2340" |     migrate_from = "1006_auto_20201208_2209_squashed_1011_auto_20210101_2340" | ||||||
|     migrate_to = "1012_fix_archive_files" |     migrate_to = "1012_fix_archive_files" | ||||||
|     auto_migrate = False |     auto_migrate = False | ||||||
|  |  | ||||||
| @@ -458,7 +458,7 @@ class TestMigrateArchiveFilesBackwards( | |||||||
|     TestMigrations, |     TestMigrations, | ||||||
| ): | ): | ||||||
|     migrate_from = "1012_fix_archive_files" |     migrate_from = "1012_fix_archive_files" | ||||||
|     migrate_to = "1011_auto_20210101_2340" |     migrate_to = "1006_auto_20201208_2209_squashed_1011_auto_20210101_2340" | ||||||
|  |  | ||||||
|     def setUpBeforeMigration(self, apps): |     def setUpBeforeMigration(self, apps): | ||||||
|         Document = apps.get_model("documents", "Document") |         Document = apps.get_model("documents", "Document") | ||||||
| @@ -521,7 +521,7 @@ class TestMigrateArchiveFilesBackwardsWithFilenameFormat( | |||||||
| @override_settings(FILENAME_FORMAT="") | @override_settings(FILENAME_FORMAT="") | ||||||
| class TestMigrateArchiveFilesBackwardsErrors(DirectoriesMixin, TestMigrations): | class TestMigrateArchiveFilesBackwardsErrors(DirectoriesMixin, TestMigrations): | ||||||
|     migrate_from = "1012_fix_archive_files" |     migrate_from = "1012_fix_archive_files" | ||||||
|     migrate_to = "1011_auto_20210101_2340" |     migrate_to = "1006_auto_20201208_2209_squashed_1011_auto_20210101_2340" | ||||||
|     auto_migrate = False |     auto_migrate = False | ||||||
|  |  | ||||||
|     def test_filename_clash(self): |     def test_filename_clash(self): | ||||||
|   | |||||||
| @@ -23,7 +23,9 @@ migration_1037_obj = importlib.import_module( | |||||||
| ) | ) | ||||||
| @mock.patch(f"{__name__}.migration_1037_obj.run_convert") | @mock.patch(f"{__name__}.migration_1037_obj.run_convert") | ||||||
| class TestMigrateToEncrytpedWebPThumbnails(TestMigrations): | class TestMigrateToEncrytpedWebPThumbnails(TestMigrations): | ||||||
|     migrate_from = "1036_alter_savedviewfilterrule_rule_type" |     migrate_from = ( | ||||||
|  |         "1022_paperlesstask_squashed_1036_alter_savedviewfilterrule_rule_type" | ||||||
|  |     ) | ||||||
|     migrate_to = "1037_webp_encrypted_thumbnail_conversion" |     migrate_to = "1037_webp_encrypted_thumbnail_conversion" | ||||||
|     auto_migrate = False |     auto_migrate = False | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ migration_1021_obj = importlib.import_module( | |||||||
| ) | ) | ||||||
| @mock.patch(f"{__name__}.migration_1021_obj.run_convert") | @mock.patch(f"{__name__}.migration_1021_obj.run_convert") | ||||||
| class TestMigrateWebPThumbnails(TestMigrations): | class TestMigrateWebPThumbnails(TestMigrations): | ||||||
|     migrate_from = "1020_merge_20220518_1839" |     migrate_from = "1016_auto_20210317_1351_squashed_1020_merge_20220518_1839" | ||||||
|     migrate_to = "1021_webp_thumbnail_conversion" |     migrate_to = "1021_webp_thumbnail_conversion" | ||||||
|     auto_migrate = False |     auto_migrate = False | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,477 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 17:46 | ||||||
|  |  | ||||||
|  | import django.db.migrations.operations.special | ||||||
|  | import django.db.models.deletion | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("paperless_mail", "0001_initial"), | ||||||
|  |         ("paperless_mail", "0002_auto_20201117_1334"), | ||||||
|  |         ("paperless_mail", "0003_auto_20201118_1940"), | ||||||
|  |         ("paperless_mail", "0004_mailrule_order"), | ||||||
|  |         ("paperless_mail", "0005_help_texts"), | ||||||
|  |         ("paperless_mail", "0006_auto_20210101_2340"), | ||||||
|  |         ("paperless_mail", "0007_auto_20210106_0138"), | ||||||
|  |         ("paperless_mail", "0008_auto_20210516_0940"), | ||||||
|  |         ("paperless_mail", "0009_mailrule_assign_tags"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("documents", "1002_auto_20201111_1105"), | ||||||
|  |         ("documents", "1011_auto_20210101_2340"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="MailAccount", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("name", models.CharField(max_length=256, unique=True)), | ||||||
|  |                 ("imap_server", models.CharField(max_length=256)), | ||||||
|  |                 ("imap_port", models.IntegerField(blank=True, null=True)), | ||||||
|  |                 ( | ||||||
|  |                     "imap_security", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "No encryption"), | ||||||
|  |                             (2, "Use SSL"), | ||||||
|  |                             (3, "Use STARTTLS"), | ||||||
|  |                         ], | ||||||
|  |                         default=2, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("username", models.CharField(max_length=256)), | ||||||
|  |                 ("password", models.CharField(max_length=256)), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="MailRule", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ("name", models.CharField(max_length=256)), | ||||||
|  |                 ("folder", models.CharField(default="INBOX", max_length=256)), | ||||||
|  |                 ( | ||||||
|  |                     "filter_from", | ||||||
|  |                     models.CharField(blank=True, max_length=256, null=True), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "filter_subject", | ||||||
|  |                     models.CharField(blank=True, max_length=256, null=True), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "filter_body", | ||||||
|  |                     models.CharField(blank=True, max_length=256, null=True), | ||||||
|  |                 ), | ||||||
|  |                 ("maximum_age", models.PositiveIntegerField(default=30)), | ||||||
|  |                 ( | ||||||
|  |                     "action", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "Delete"), | ||||||
|  |                             (2, "Move to specified folder"), | ||||||
|  |                             (3, "Mark as read, don't process read mails"), | ||||||
|  |                             (4, "Flag the mail, don't process flagged mails"), | ||||||
|  |                         ], | ||||||
|  |                         default=3, | ||||||
|  |                         help_text="The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched.", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "action_parameter", | ||||||
|  |                     models.CharField( | ||||||
|  |                         blank=True, | ||||||
|  |                         help_text="Additional parameter for the action selected above, i.e., the target folder of the move to folder action.", | ||||||
|  |                         max_length=256, | ||||||
|  |                         null=True, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "assign_title_from", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "Use subject as title"), | ||||||
|  |                             (2, "Use attachment filename as title"), | ||||||
|  |                         ], | ||||||
|  |                         default=1, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "assign_correspondent_from", | ||||||
|  |                     models.PositiveIntegerField( | ||||||
|  |                         choices=[ | ||||||
|  |                             (1, "Do not assign a correspondent"), | ||||||
|  |                             (2, "Use mail address"), | ||||||
|  |                             (3, "Use name (or mail address if not available)"), | ||||||
|  |                             (4, "Use correspondent selected below"), | ||||||
|  |                         ], | ||||||
|  |                         default=1, | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "account", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         related_name="rules", | ||||||
|  |                         to="paperless_mail.mailaccount", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "assign_correspondent", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                         to="documents.correspondent", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "assign_document_type", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                         to="documents.documenttype", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "assign_tag", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                         to="documents.tag", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |         migrations.RunPython( | ||||||
|  |             code=django.db.migrations.operations.special.RunPython.noop, | ||||||
|  |             reverse_code=django.db.migrations.operations.special.RunPython.noop, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="imap_port", | ||||||
|  |             field=models.IntegerField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections.", | ||||||
|  |                 null=True, | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=256, unique=True), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="order", | ||||||
|  |             field=models.IntegerField(default=0), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (3, "Mark as read, don't process read mails"), | ||||||
|  |                     (4, "Flag the mail, don't process flagged mails"), | ||||||
|  |                     (2, "Move to specified folder"), | ||||||
|  |                     (1, "Delete"), | ||||||
|  |                 ], | ||||||
|  |                 default=3, | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="maximum_age", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 default=30, | ||||||
|  |                 help_text="Specified in days.", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="mailaccount", | ||||||
|  |             options={ | ||||||
|  |                 "verbose_name": "mail account", | ||||||
|  |                 "verbose_name_plural": "mail accounts", | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterModelOptions( | ||||||
|  |             name="mailrule", | ||||||
|  |             options={"verbose_name": "mail rule", "verbose_name_plural": "mail rules"}, | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="imap_port", | ||||||
|  |             field=models.IntegerField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections.", | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="IMAP port", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="imap_security", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[(1, "No encryption"), (2, "Use SSL"), (3, "Use STARTTLS")], | ||||||
|  |                 default=2, | ||||||
|  |                 verbose_name="IMAP security", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="imap_server", | ||||||
|  |             field=models.CharField(max_length=256, verbose_name="IMAP server"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=256, unique=True, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="password", | ||||||
|  |             field=models.CharField(max_length=256, verbose_name="password"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="username", | ||||||
|  |             field=models.CharField(max_length=256, verbose_name="username"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="account", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                 related_name="rules", | ||||||
|  |                 to="paperless_mail.mailaccount", | ||||||
|  |                 verbose_name="account", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (3, "Mark as read, don't process read mails"), | ||||||
|  |                     (4, "Flag the mail, don't process flagged mails"), | ||||||
|  |                     (2, "Move to specified folder"), | ||||||
|  |                     (1, "Delete"), | ||||||
|  |                 ], | ||||||
|  |                 default=3, | ||||||
|  |                 verbose_name="action", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action_parameter", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="Additional parameter for the action selected above, i.e., the target folder of the move to folder action.", | ||||||
|  |                 max_length=256, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="action parameter", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_correspondent", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to="documents.correspondent", | ||||||
|  |                 verbose_name="assign this correspondent", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_correspondent_from", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Do not assign a correspondent"), | ||||||
|  |                     (2, "Use mail address"), | ||||||
|  |                     (3, "Use name (or mail address if not available)"), | ||||||
|  |                     (4, "Use correspondent selected below"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="assign correspondent from", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_document_type", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to="documents.documenttype", | ||||||
|  |                 verbose_name="assign this document type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_tag", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to="documents.tag", | ||||||
|  |                 verbose_name="assign this tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_title_from", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Use subject as title"), | ||||||
|  |                     (2, "Use attachment filename as title"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="assign title from", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_body", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 max_length=256, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="filter body", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_from", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 max_length=256, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="filter from", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_subject", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 max_length=256, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="filter subject", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="folder", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 default="INBOX", | ||||||
|  |                 max_length=256, | ||||||
|  |                 verbose_name="folder", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="maximum_age", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 default=30, | ||||||
|  |                 help_text="Specified in days.", | ||||||
|  |                 verbose_name="maximum age", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=256, unique=True, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="order", | ||||||
|  |             field=models.IntegerField(default=0, verbose_name="order"), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="attachment_type", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Only process attachments."), | ||||||
|  |                     (2, "Process all files, including 'inline' attachments."), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 help_text="Inline attachments include embedded images, so it's best to combine this option with a filename filter.", | ||||||
|  |                 verbose_name="attachment type", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_attachment_filename", | ||||||
|  |             field=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 attachment filename", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="character_set", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 default="UTF-8", | ||||||
|  |                 help_text="The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'.", | ||||||
|  |                 max_length=256, | ||||||
|  |                 verbose_name="character set", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action_parameter", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots.", | ||||||
|  |                 max_length=256, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="action parameter", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="folder", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 default="INBOX", | ||||||
|  |                 help_text="Subfolders must be separated by dots.", | ||||||
|  |                 max_length=256, | ||||||
|  |                 verbose_name="folder", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="mail_rules_multi", | ||||||
|  |                 to="documents.tag", | ||||||
|  |                 verbose_name="assign this tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,321 @@ | |||||||
|  | # Generated by Django 4.2.13 on 2024-06-28 17:47 | ||||||
|  |  | ||||||
|  | import django.db.models.deletion | ||||||
|  | import django.utils.timezone | ||||||
|  | from django.conf import settings | ||||||
|  | from django.db import migrations | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |     replaces = [ | ||||||
|  |         ("paperless_mail", "0011_remove_mailrule_assign_tag"), | ||||||
|  |         ("paperless_mail", "0012_alter_mailrule_assign_tags"), | ||||||
|  |         ("paperless_mail", "0009_alter_mailrule_action_alter_mailrule_folder"), | ||||||
|  |         ("paperless_mail", "0013_merge_20220412_1051"), | ||||||
|  |         ("paperless_mail", "0014_alter_mailrule_action"), | ||||||
|  |         ("paperless_mail", "0015_alter_mailrule_action"), | ||||||
|  |         ("paperless_mail", "0016_mailrule_consumption_scope"), | ||||||
|  |         ("paperless_mail", "0017_mailaccount_owner_mailrule_owner"), | ||||||
|  |         ("paperless_mail", "0018_processedmail"), | ||||||
|  |         ("paperless_mail", "0019_mailrule_filter_to"), | ||||||
|  |         ("paperless_mail", "0020_mailaccount_is_token"), | ||||||
|  |         ("paperless_mail", "0021_alter_mailaccount_password"), | ||||||
|  |         ("paperless_mail", "0022_mailrule_assign_owner_from_rule_and_more"), | ||||||
|  |         ("paperless_mail", "0023_remove_mailrule_filter_attachment_filename_and_more"), | ||||||
|  |         ("paperless_mail", "0024_alter_mailrule_name_and_more"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||||
|  |         ("paperless_mail", "0010_auto_20220311_1602"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.RemoveField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_tag", | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 to="documents.tag", | ||||||
|  |                 verbose_name="assign this tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Mark as read, don't process read mails"), | ||||||
|  |                     (2, "Flag the mail, don't process flagged mails"), | ||||||
|  |                     (3, "Move to specified folder"), | ||||||
|  |                     (4, "Delete"), | ||||||
|  |                 ], | ||||||
|  |                 default=3, | ||||||
|  |                 verbose_name="action", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="folder", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 default="INBOX", | ||||||
|  |                 help_text="Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server.", | ||||||
|  |                 max_length=256, | ||||||
|  |                 verbose_name="folder", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Delete"), | ||||||
|  |                     (2, "Move to specified folder"), | ||||||
|  |                     (3, "Mark as read, don't process read mails"), | ||||||
|  |                     (4, "Flag the mail, don't process flagged mails"), | ||||||
|  |                 ], | ||||||
|  |                 default=3, | ||||||
|  |                 verbose_name="action", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="action", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Delete"), | ||||||
|  |                     (2, "Move to specified folder"), | ||||||
|  |                     (3, "Mark as read, don't process read mails"), | ||||||
|  |                     (4, "Flag the mail, don't process flagged mails"), | ||||||
|  |                     (5, "Tag the mail with specified tag, don't process tagged mails"), | ||||||
|  |                 ], | ||||||
|  |                 default=3, | ||||||
|  |                 verbose_name="action", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="consumption_scope", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Only process attachments."), | ||||||
|  |                     ( | ||||||
|  |                         2, | ||||||
|  |                         "Process full Mail (with embedded attachments in file) as .eml", | ||||||
|  |                     ), | ||||||
|  |                     ( | ||||||
|  |                         3, | ||||||
|  |                         "Process full Mail (with embedded attachments in file) as .eml + process attachments as separate documents", | ||||||
|  |                     ), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="consumption scope", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="owner", | ||||||
|  |             field=models.ForeignKey( | ||||||
|  |                 blank=True, | ||||||
|  |                 null=True, | ||||||
|  |                 on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                 to=settings.AUTH_USER_MODEL, | ||||||
|  |                 verbose_name="owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name="ProcessedMail", | ||||||
|  |             fields=[ | ||||||
|  |                 ( | ||||||
|  |                     "id", | ||||||
|  |                     models.AutoField( | ||||||
|  |                         auto_created=True, | ||||||
|  |                         primary_key=True, | ||||||
|  |                         serialize=False, | ||||||
|  |                         verbose_name="ID", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "folder", | ||||||
|  |                     models.CharField( | ||||||
|  |                         editable=False, | ||||||
|  |                         max_length=256, | ||||||
|  |                         verbose_name="folder", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "uid", | ||||||
|  |                     models.CharField( | ||||||
|  |                         editable=False, | ||||||
|  |                         max_length=256, | ||||||
|  |                         verbose_name="uid", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "subject", | ||||||
|  |                     models.CharField( | ||||||
|  |                         editable=False, | ||||||
|  |                         max_length=256, | ||||||
|  |                         verbose_name="subject", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "received", | ||||||
|  |                     models.DateTimeField(editable=False, verbose_name="received"), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "processed", | ||||||
|  |                     models.DateTimeField( | ||||||
|  |                         default=django.utils.timezone.now, | ||||||
|  |                         editable=False, | ||||||
|  |                         verbose_name="processed", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "status", | ||||||
|  |                     models.CharField( | ||||||
|  |                         editable=False, | ||||||
|  |                         max_length=256, | ||||||
|  |                         verbose_name="status", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "error", | ||||||
|  |                     models.TextField( | ||||||
|  |                         blank=True, | ||||||
|  |                         editable=False, | ||||||
|  |                         null=True, | ||||||
|  |                         verbose_name="error", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "owner", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         blank=True, | ||||||
|  |                         null=True, | ||||||
|  |                         on_delete=django.db.models.deletion.SET_NULL, | ||||||
|  |                         to=settings.AUTH_USER_MODEL, | ||||||
|  |                         verbose_name="owner", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |                 ( | ||||||
|  |                     "rule", | ||||||
|  |                     models.ForeignKey( | ||||||
|  |                         editable=False, | ||||||
|  |                         on_delete=django.db.models.deletion.CASCADE, | ||||||
|  |                         to="paperless_mail.mailrule", | ||||||
|  |                     ), | ||||||
|  |                 ), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 "abstract": False, | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_to", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 max_length=256, | ||||||
|  |                 null=True, | ||||||
|  |                 verbose_name="filter to", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="is_token", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=False, | ||||||
|  |                 verbose_name="Is token authentication", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailaccount", | ||||||
|  |             name="password", | ||||||
|  |             field=models.CharField(max_length=2048, verbose_name="password"), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_owner_from_rule", | ||||||
|  |             field=models.BooleanField( | ||||||
|  |                 default=True, | ||||||
|  |                 verbose_name="Assign the rule owner to documents", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_title_from", | ||||||
|  |             field=models.PositiveIntegerField( | ||||||
|  |                 choices=[ | ||||||
|  |                     (1, "Use subject as title"), | ||||||
|  |                     (2, "Use attachment filename as title"), | ||||||
|  |                     (3, "Do not assign title from rule"), | ||||||
|  |                 ], | ||||||
|  |                 default=1, | ||||||
|  |                 verbose_name="assign title from", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.RenameField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             old_name="filter_attachment_filename", | ||||||
|  |             new_name="filter_attachment_filename_include", | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_attachment_filename_exclude", | ||||||
|  |             field=models.CharField( | ||||||
|  |                 blank=True, | ||||||
|  |                 help_text="Do not 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 attachment filename exclusive", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="filter_attachment_filename_include", | ||||||
|  |             field=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 attachment filename inclusive", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="name", | ||||||
|  |             field=models.CharField(max_length=256, verbose_name="name"), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 fields=("name", "owner"), | ||||||
|  |                 name="paperless_mail_mailrule_unique_name_owner", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         migrations.AddConstraint( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             constraint=models.UniqueConstraint( | ||||||
|  |                 condition=models.Q(("owner__isnull", True)), | ||||||
|  |                 fields=("name",), | ||||||
|  |                 name="paperless_mail_mailrule_name_unique", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
		Reference in New Issue
	
	Block a user
	 Trenton H
					Trenton H