From 66ffed2f6f83eecc884ef40874755c5e467e675c Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Mon, 6 Mar 2017 08:19:35 +0100
Subject: [PATCH] Move Newsitems to separate app

Move and `state-migrate` news items away from
 the mighty `scipost` app.
---
 news/__init__.py                              |  0
 news/admin.py                                 | 10 ++
 news/apps.py                                  |  5 +
 news/migrations/0001_initial.py               | 35 +++++++
 news/migrations/__init__.py                   |  0
 news/models.py                                | 52 ++++++++++
 news/tests.py                                 |  3 +
 news/urls.py                                  |  7 ++
 news/views.py                                 |  9 ++
 scipost/migrations/0039_auto_20170306_0804.py | 98 +++++++++++++++++++
 10 files changed, 219 insertions(+)
 create mode 100644 news/__init__.py
 create mode 100644 news/admin.py
 create mode 100644 news/apps.py
 create mode 100644 news/migrations/0001_initial.py
 create mode 100644 news/migrations/__init__.py
 create mode 100644 news/models.py
 create mode 100644 news/tests.py
 create mode 100644 news/urls.py
 create mode 100644 news/views.py
 create mode 100644 scipost/migrations/0039_auto_20170306_0804.py

diff --git a/news/__init__.py b/news/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/news/admin.py b/news/admin.py
new file mode 100644
index 000000000..43253c6cc
--- /dev/null
+++ b/news/admin.py
@@ -0,0 +1,10 @@
+from django.contrib import admin
+
+from .models import NewsItem
+
+
+class NewsItemAdmin(admin.ModelAdmin):
+    search_fields = ['blurb', 'followup_link_text']
+
+
+admin.site.register(NewsItem, NewsItemAdmin)
diff --git a/news/apps.py b/news/apps.py
new file mode 100644
index 000000000..5a7b92d0f
--- /dev/null
+++ b/news/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class NewsConfig(AppConfig):
+    name = 'news'
diff --git a/news/migrations/0001_initial.py b/news/migrations/0001_initial.py
new file mode 100644
index 000000000..4df072090
--- /dev/null
+++ b/news/migrations/0001_initial.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-06 07:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('scipost', '0039_auto_20170306_0804'),
+    ]
+
+    state_operations = [
+        migrations.CreateModel(
+            name='NewsItem',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateField()),
+                ('headline', models.CharField(max_length=300)),
+                ('blurb', models.TextField()),
+                ('followup_link', models.URLField(blank=True, null=True)),
+                ('followup_link_text', models.CharField(blank=True, max_length=300, null=True)),
+            ],
+            options={
+                'db_table': 'scipost_newsitem',
+            },
+        ),
+    ]
+
+    operations = [
+        migrations.SeparateDatabaseAndState(state_operations=state_operations)
+    ]
diff --git a/news/migrations/__init__.py b/news/migrations/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/news/models.py b/news/models.py
new file mode 100644
index 000000000..d421b8c4b
--- /dev/null
+++ b/news/models.py
@@ -0,0 +1,52 @@
+from django.db import models
+from django.template import Template, Context
+
+
+class NewsItem(models.Model):
+    date = models.DateField()
+    headline = models.CharField(max_length=300)
+    blurb = models.TextField()
+    followup_link = models.URLField(blank=True, null=True)
+    followup_link_text = models.CharField(max_length=300, blank=True, null=True)
+
+    class Meta:
+        db_table = 'scipost_newsitem'
+
+    def __str__(self):
+        return self.date.strftime('%Y-%m-%d') + ', ' + self.headline
+
+    def descriptor_full(self):
+        """ For News page. """
+        descriptor = ('<div class="flex-greybox640">'
+                      '<h3 class="NewsHeadline">{{ headline }}</h3>'
+                      '<p>{{ date }}</p>'
+                      '<p>{{ blurb }}</p>'
+                      )
+        context = Context({'headline': self.headline,
+                           'date': self.date.strftime('%Y-%m-%d'),
+                           'blurb': self.blurb, })
+        if self.followup_link:
+            descriptor += '<p><a href="{{ followup_link }}">{{ followup_link_text }}</a></p>'
+            context['followup_link'] = self.followup_link
+            context['followup_link_text'] = self.followup_link_text
+        descriptor += '</div>'
+        template = Template(descriptor)
+        return template.render(context)
+
+    def descriptor_small(self):
+        """ For index page. """
+        descriptor = ('<h3 class="NewsHeadline">{{ headline }}</h3>'
+                      '<div class="p-2">'
+                      '<p>{{ date }}</p>'
+                      '<p>{{ blurb }}</p>'
+                      )
+        context = Context({'headline': self.headline,
+                           'date': self.date.strftime('%Y-%m-%d'),
+                           'blurb': self.blurb, })
+        if self.followup_link:
+            descriptor += '<p><a href="{{ followup_link }}">{{ followup_link_text }}</a></p>'
+            context['followup_link'] = self.followup_link
+            context['followup_link_text'] = self.followup_link_text
+        descriptor += '</div>'
+        template = Template(descriptor)
+        return template.render(context)
diff --git a/news/tests.py b/news/tests.py
new file mode 100644
index 000000000..7ce503c2d
--- /dev/null
+++ b/news/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/news/urls.py b/news/urls.py
new file mode 100644
index 000000000..a84f2906b
--- /dev/null
+++ b/news/urls.py
@@ -0,0 +1,7 @@
+from django.conf.urls import url
+
+from . import views
+
+urlpatterns = [
+    url(r'^$', views.news, name='news'),
+]
diff --git a/news/views.py b/news/views.py
new file mode 100644
index 000000000..6e6773d73
--- /dev/null
+++ b/news/views.py
@@ -0,0 +1,9 @@
+from django.shortcuts import render
+
+from .models import NewsItem
+
+
+def news(request):
+    newsitems = NewsItem.objects.all().order_by('-date')
+    context = {'newsitems': newsitems}
+    return render(request, 'scipost/news.html', context)
diff --git a/scipost/migrations/0039_auto_20170306_0804.py b/scipost/migrations/0039_auto_20170306_0804.py
new file mode 100644
index 000000000..49894a205
--- /dev/null
+++ b/scipost/migrations/0039_auto_20170306_0804.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-06 07:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0038_nomination_webpage'),
+    ]
+
+    state_operations = [
+        migrations.RemoveField(
+            model_name='feedback',
+            name='VGM',
+        ),
+        migrations.RemoveField(
+            model_name='feedback',
+            name='by',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='VGM',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='in_agreement',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='in_disagreement',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='in_notsure',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='put_forward_by',
+        ),
+        migrations.DeleteModel(
+            name='NewsItem',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='VGM',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='by',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='in_agreement',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='in_disagreement',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='in_notsure',
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='feedback',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Feedback'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='motion',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Motion'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='nomination',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Nomination'),
+        ),
+        migrations.DeleteModel(
+            name='Feedback',
+        ),
+        migrations.DeleteModel(
+            name='Motion',
+        ),
+        migrations.DeleteModel(
+            name='Nomination',
+        ),
+        migrations.DeleteModel(
+            name='VGM',
+        ),
+    ]
+
+    operations = [
+        migrations.SeparateDatabaseAndState(state_operations=state_operations)
+    ]
-- 
GitLab