From b876a0d0df3634eb7fb791f60cdfae50f6a2d97e Mon Sep 17 00:00:00 2001 From: Daniel Quinn Date: Sat, 25 Mar 2017 16:21:46 +0000 Subject: [PATCH] feat: add the new reminders app --- src/documents/static/paperless.css | 11 ++++++++++ src/paperless/settings.py | 1 + src/paperless/urls.py | 2 ++ src/reminders/__init__.py | 0 src/reminders/admin.py | 20 ++++++++++++++++++ src/reminders/apps.py | 5 +++++ src/reminders/filters.py | 14 ++++++++++++ src/reminders/migrations/0001_initial.py | 27 ++++++++++++++++++++++++ src/reminders/migrations/__init__.py | 0 src/reminders/models.py | 8 +++++++ src/reminders/serialisers.py | 14 ++++++++++++ src/reminders/tests.py | 3 +++ src/reminders/views.py | 22 +++++++++++++++++++ 13 files changed, 127 insertions(+) create mode 100644 src/reminders/__init__.py create mode 100644 src/reminders/admin.py create mode 100644 src/reminders/apps.py create mode 100644 src/reminders/filters.py create mode 100644 src/reminders/migrations/0001_initial.py create mode 100644 src/reminders/migrations/__init__.py create mode 100644 src/reminders/models.py create mode 100644 src/reminders/serialisers.py create mode 100644 src/reminders/tests.py create mode 100644 src/reminders/views.py diff --git a/src/documents/static/paperless.css b/src/documents/static/paperless.css index 8b001bbcb..506debb6d 100644 --- a/src/documents/static/paperless.css +++ b/src/documents/static/paperless.css @@ -10,3 +10,14 @@ td a.tag { margin: 1px; display: inline-block; } + +#result_list th.column-note { + text-align: right; +} +#result_list td.field-note { + text-align: right; +} +#result_list td textarea { + width: 90%; + height: 5em; +} \ No newline at end of file diff --git a/src/paperless/settings.py b/src/paperless/settings.py index edd0da9f3..f95c69be5 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -61,6 +61,7 @@ INSTALLED_APPS = [ "django_extensions", "documents.apps.DocumentsConfig", + "reminders.apps.RemindersConfig", "paperless_tesseract.apps.PaperlessTesseractConfig", "flat_responsive", diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 1c23f0262..b7bc13b10 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -24,11 +24,13 @@ from documents.views import ( IndexView, FetchView, PushView, CorrespondentViewSet, TagViewSet, DocumentViewSet, LogViewSet ) +from reminders.views import ReminderViewSet router = DefaultRouter() router.register(r"correspondents", CorrespondentViewSet) router.register(r"documents", DocumentViewSet) router.register(r"logs", LogViewSet) +router.register(r"reminders", ReminderViewSet) router.register(r"tags", TagViewSet) urlpatterns = [ diff --git a/src/reminders/__init__.py b/src/reminders/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/reminders/admin.py b/src/reminders/admin.py new file mode 100644 index 000000000..bc39e24aa --- /dev/null +++ b/src/reminders/admin.py @@ -0,0 +1,20 @@ +from django.conf import settings +from django.contrib import admin + +from .models import Reminder + + +class ReminderAdmin(admin.ModelAdmin): + + class Media: + css = { + "all": ("paperless.css",) + } + + list_per_page = settings.PAPERLESS_LIST_PER_PAGE + list_display = ("date", "document", "note") + list_filter = ("date",) + list_editable = ("note",) + + +admin.site.register(Reminder, ReminderAdmin) diff --git a/src/reminders/apps.py b/src/reminders/apps.py new file mode 100644 index 000000000..a745cad29 --- /dev/null +++ b/src/reminders/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class RemindersConfig(AppConfig): + name = "reminders" diff --git a/src/reminders/filters.py b/src/reminders/filters.py new file mode 100644 index 000000000..8ca8f4402 --- /dev/null +++ b/src/reminders/filters.py @@ -0,0 +1,14 @@ +from django_filters.rest_framework import CharFilter, FilterSet + +from .models import Reminder + + +class ReminderFilterSet(FilterSet): + + class Meta(object): + model = Reminder + fields = { + "document": ["exact"], + "date": ["gt", "lt", "gte", "lte", "exact"], + "note": ["istartswith", "iendswith", "icontains"] + } diff --git a/src/reminders/migrations/0001_initial.py b/src/reminders/migrations/0001_initial.py new file mode 100644 index 000000000..6daad4ef2 --- /dev/null +++ b/src/reminders/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-25 15:58 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('documents', '0016_auto_20170325_1558'), + ] + + operations = [ + migrations.CreateModel( + name='Reminder', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateTimeField()), + ('note', models.TextField(blank=True)), + ('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='documents.Document')), + ], + ), + ] diff --git a/src/reminders/migrations/__init__.py b/src/reminders/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/reminders/models.py b/src/reminders/models.py new file mode 100644 index 000000000..d6fb744f7 --- /dev/null +++ b/src/reminders/models.py @@ -0,0 +1,8 @@ +from django.db import models + + +class Reminder(models.Model): + + document = models.ForeignKey("documents.Document") + date = models.DateTimeField() + note = models.TextField(blank=True) diff --git a/src/reminders/serialisers.py b/src/reminders/serialisers.py new file mode 100644 index 000000000..bf8dd09c2 --- /dev/null +++ b/src/reminders/serialisers.py @@ -0,0 +1,14 @@ +from documents.models import Document +from rest_framework import serializers + +from .models import Reminder + + +class ReminderSerializer(serializers.HyperlinkedModelSerializer): + + document = serializers.HyperlinkedRelatedField( + view_name="drf:document-detail", queryset=Document.objects) + + class Meta(object): + model = Reminder + fields = ("id", "document", "date", "note") diff --git a/src/reminders/tests.py b/src/reminders/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/src/reminders/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/reminders/views.py b/src/reminders/views.py new file mode 100644 index 000000000..d2ead96b5 --- /dev/null +++ b/src/reminders/views.py @@ -0,0 +1,22 @@ +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework.filters import OrderingFilter +from rest_framework.permissions import IsAuthenticated +from rest_framework.viewsets import ( + ModelViewSet, +) + +from .filters import ReminderFilterSet +from .models import Reminder +from .serialisers import ReminderSerializer +from paperless.views import StandardPagination + + +class ReminderViewSet(ModelViewSet): + model = Reminder + queryset = Reminder.objects + serializer_class = ReminderSerializer + pagination_class = StandardPagination + permission_classes = (IsAuthenticated,) + filter_backends = (DjangoFilterBackend, OrderingFilter) + filter_class = ReminderFilterSet + ordering_fields = ("date", "document")