From 913fac1a293d8705d0ad2fb615be3eef7365ee05 Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Fri, 3 Aug 2018 11:45:28 +0100
Subject: [PATCH] Add the RFPs to the homepage

---
 .../migrations/0010_add_rfp_to_homepage.py    | 48 +++++++++++++++++++
 opentech/public/home/models.py                | 25 +++++++++-
 .../public/home/templates/home/home_page.html |  2 +
 .../templates/home/includes/list_block.html   | 32 +++++++------
 4 files changed, 92 insertions(+), 15 deletions(-)
 create mode 100644 opentech/public/home/migrations/0010_add_rfp_to_homepage.py

diff --git a/opentech/public/home/migrations/0010_add_rfp_to_homepage.py b/opentech/public/home/migrations/0010_add_rfp_to_homepage.py
new file mode 100644
index 000000000..55e83b1bd
--- /dev/null
+++ b/opentech/public/home/migrations/0010_add_rfp_to_homepage.py
@@ -0,0 +1,48 @@
+# Generated by Django 2.0.2 on 2018-08-03 10:44
+
+from django.db import migrations, models
+import django.db.models.deletion
+import modelcluster.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('wagtailcore', '0040_page_draft_title'),
+        ('home', '0009_django2_update'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PromotedRFPs',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
+                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
+            ],
+            options={
+                'ordering': ['sort_order'],
+                'abstract': False,
+            },
+        ),
+        migrations.AddField(
+            model_name='homepage',
+            name='rfps_intro',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='homepage',
+            name='rfps_title',
+            field=models.CharField(default='Requests For Partners', max_length=255),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='promotedrfps',
+            name='source_page',
+            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='promoted_rfps', to='home.HomePage'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='promotedrfps',
+            unique_together={('page',)},
+        ),
+    ]
diff --git a/opentech/public/home/models.py b/opentech/public/home/models.py
index 5918dd877..22e452eeb 100644
--- a/opentech/public/home/models.py
+++ b/opentech/public/home/models.py
@@ -9,7 +9,7 @@ from wagtail.search import index
 
 from opentech.public.utils.models import BasePage, RelatedPage
 
-from opentech.public.funds.models import FundPage, LabPage
+from opentech.public.funds.models import FundPage, LabPage, RFPPage
 
 from .blocks import OurWorkBlock
 
@@ -42,6 +42,20 @@ class PromotedLabs(RelatedPage):
     ]
 
 
+class PromotedRFPs(RelatedPage):
+    source_page = ParentalKey(
+        'home.HomePage',
+        related_name='promoted_rfps'
+    )
+
+    class Meta(RelatedPage.Meta):
+        unique_together = ('page',)
+
+    panels = [
+        PageChooserPanel('page', 'public_funds.RFPPage'),
+    ]
+
+
 class HomePage(BasePage):
     # Only allow creating HomePages at the root level
     parent_page_types = ['wagtailcore.Page']
@@ -69,6 +83,9 @@ class HomePage(BasePage):
     labs_link = models.ForeignKey('wagtailcore.Page', related_name='+', on_delete=models.PROTECT)
     labs_link_text = models.CharField(max_length=255)
 
+    rfps_title = models.CharField(max_length=255)
+    rfps_intro = models.TextField(blank=True)
+
     search_fields = BasePage.search_fields + [
         index.SearchField('strapline'),
     ]
@@ -99,6 +116,11 @@ class HomePage(BasePage):
             PageChooserPanel('labs_link'),
             FieldPanel('labs_link_text'),
         ], heading='Labs'),
+        MultiFieldPanel([
+            FieldPanel('rfps_title'),
+            FieldPanel('rfps_intro'),
+            InlinePanel('promoted_rfps', label='Promoted RFPs', max_num=NUM_RELATED),
+        ], heading='Labs'),
     ]
 
     def get_related(self, page_type, base_list):
@@ -125,4 +147,5 @@ class HomePage(BasePage):
         context = super().get_context(*args, **kwargs)
         context['lab_list'] = self.get_related(LabPage, self.promoted_labs)
         context['fund_list'] = self.get_related(FundPage, self.promoted_funds)
+        context['rfps_list'] = self.get_related(RFPPage, self.promoted_rfps)
         return context
diff --git a/opentech/public/home/templates/home/home_page.html b/opentech/public/home/templates/home/home_page.html
index 2a6250543..1b66674fd 100644
--- a/opentech/public/home/templates/home/home_page.html
+++ b/opentech/public/home/templates/home/home_page.html
@@ -101,4 +101,6 @@
 
     {% include "home/includes/list_block.html" with bg_color="light-grey" arrow_color="blue" card_modifier="card--lab" title=page.labs_title intro=page.labs_intro link=page.labs_link link_text=page.labs_link_text listing=lab_list %}
 
+    {% include "home/includes/list_block.html" with bg_color="dark" arrow_color="white" title=page.rfps_title intro=page.rfps_intro listing=rfps_list %}
+
 {% endblock %}
diff --git a/opentech/public/home/templates/home/includes/list_block.html b/opentech/public/home/templates/home/includes/list_block.html
index e4feeb284..2ba03c9ce 100644
--- a/opentech/public/home/templates/home/includes/list_block.html
+++ b/opentech/public/home/templates/home/includes/list_block.html
@@ -6,12 +6,14 @@
                 <h2>{{ title }}</h2>
                 <p>{{ intro }}</p>
             </div>
-            <div class="show-tablet">
-                <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
-                    {{ link_text }}
-                    <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-                </a>
-            </div>
+            {% if link_text and link %}
+                <div class="show-tablet">
+                    <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
+                        {{ link_text }}
+                        <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                    </a>
+                </div>
+            {% endif %}
         </section>
 
         <section class="grid grid--max-three">
@@ -36,13 +38,15 @@
                 </a>
             {% endfor %}
         </section>
-        <div class="wrapper wrapper--center show-mobile">
-            <h5 class="heading heading--contains-link">
-                <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
-                    {{ link_text }}
-                    <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-                </a>
-            </h5>
-        </div>
+        {% if link_text and link %}
+            <div class="wrapper wrapper--center show-mobile">
+                <h5 class="heading heading--contains-link">
+                    <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
+                        {{ link_text }}
+                        <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                    </a>
+                </h5>
+            </div>
+        {% endif %}
     </div>
 </div>
-- 
GitLab