Skip to content

Commit

Permalink
Remove public "partners" app (#3716)
Browse files Browse the repository at this point in the history
- Keep the app installed so the delete table migrations could run
- Update sandbox-db with removed tables

Depends on #3715
  • Loading branch information
theskumar authored Jan 29, 2024
1 parent d63620b commit 1f9aa29
Show file tree
Hide file tree
Showing 16 changed files with 68 additions and 659 deletions.
1 change: 0 additions & 1 deletion docs/references/wagtail-admin.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ The WagTail Admin is your "back office" for setting up form applications and pub
- Site history: Generates a report of user action logs.
- Aging page
- Public Site
- Investments
- Images
- Documents: Store documents like reports for blog posts
- Snippets: Snippets allow you to create elements on a website once and reuse them in multiple places. Then, if you want to change something on the snippet, you only need to change it once, and it will change across all the occurrences of the snippet. How snippets are used can vary widely between websites.
Expand Down
22 changes: 0 additions & 22 deletions hypha/public/partner/admin.py

This file was deleted.

48 changes: 0 additions & 48 deletions hypha/public/partner/admin_view.py

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import hypha.public.partner.models
import wagtail.fields
import wagtailcache.cache

Expand Down Expand Up @@ -35,12 +34,8 @@ class Migration(migrations.Migration):
(
"year",
models.IntegerField(
default=hypha.public.partner.models.current_year,
default=0,
help_text="Use format: <YYYY>",
validators=[
django.core.validators.MinValueValidator(1984),
hypha.public.partner.models.max_value_current_year,
],
),
),
(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Generated by Django 4.2.9 on 2024-01-10 08:08

from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("partner", "0003_remove_partnerindexpage_social_image_and_more"),
]

operations = [
migrations.RemoveField(
model_name="investmentcategory",
name="investment",
),
migrations.RemoveField(
model_name="investmentcategorysettings",
name="categories",
),
migrations.RemoveField(
model_name="investmentcategorysettings",
name="site",
),
migrations.RemoveField(
model_name="partnerindexpage",
name="header_image",
),
migrations.RemoveField(
model_name="partnerindexpage",
name="listing_image",
),
migrations.RemoveField(
model_name="partnerindexpage",
name="page_ptr",
),
migrations.RemoveField(
model_name="partnerpage",
name="header_image",
),
migrations.RemoveField(
model_name="partnerpage",
name="listing_image",
),
migrations.RemoveField(
model_name="partnerpage",
name="logo",
),
migrations.RemoveField(
model_name="partnerpage",
name="page_ptr",
),
migrations.DeleteModel(
name="Investment",
),
migrations.DeleteModel(
name="InvestmentCategory",
),
migrations.DeleteModel(
name="InvestmentCategorySettings",
),
migrations.DeleteModel(
name="PartnerIndexPage",
),
migrations.DeleteModel(
name="PartnerPage",
),
]
215 changes: 0 additions & 215 deletions hypha/public/partner/models.py
Original file line number Diff line number Diff line change
@@ -1,215 +0,0 @@
import datetime

import babel.numbers
from django import forms
from django.conf import settings
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from django.http import Http404
from django.shortcuts import redirect
from django.utils.translation import gettext_lazy as _
from pagedown.widgets import PagedownWidget
from wagtail.admin.forms import WagtailAdminModelForm
from wagtail.admin.panels import FieldPanel
from wagtail.contrib.settings.models import BaseSiteSetting
from wagtail.fields import RichTextField
from wagtail.models import Page
from wagtail.search import index

from hypha.apply.categories.models import Category, Option
from hypha.apply.funds.models import ApplicationSubmission
from hypha.core.wagtail.admin import register_public_site_setting
from hypha.public.utils.models import BasePage


class PartnerIndexPage(BasePage):
parent_page_types = ["standardpages.IndexPage"]
subpage_types = ["partner.PartnerPage"]

introduction = models.TextField(blank=True)

content_panels = BasePage.content_panels + [
FieldPanel("introduction", widget=PagedownWidget()),
]

search_fields = BasePage.search_fields + [
index.SearchField("introduction"),
]

def serve(self, request, *args, **kwargs):
return redirect("investments")


class PartnerPage(BasePage):
STATUS = [("active", "Active"), ("inactive", "Inactive")]

class Meta:
verbose_name = _("Partner Page")

parent_page_types = ["partner.PartnerIndexPage"]
subpage_types = []

status = models.CharField(choices=STATUS, default="current_partner", max_length=20)
public = models.BooleanField(default=True)
description = RichTextField(blank=True)
web_url = models.URLField(blank=True)
logo = models.OneToOneField(
"images.CustomImage",
null=True,
blank=True,
related_name="+",
on_delete=models.SET_NULL,
)

content_panels = Page.content_panels + [
FieldPanel("status"),
FieldPanel("public"),
FieldPanel("description"),
FieldPanel("web_url"),
FieldPanel("logo"),
]

def __str__(self):
return self.title

def get_context(self, request):
context = super(PartnerPage, self).get_context(request)
context["total_investments"] = sum(
investment.amount_committed for investment in self.investments.all()
)
return context

def get_absolute_url(self):
return self.url

@property
def category_questions(self):
category_questions = {}
if not self.investments.exists():
return
for investment in self.investments.all():
for category in investment.categories.all():
if category.name in category_questions.keys():
if category.value not in category_questions[category.name]:
category_questions[category.name].append(category.value)
else:
category_questions[category.name] = [category.value]
return category_questions

def serve(self, request, *args, **kwargs):
if not self.public:
raise Http404
return super(PartnerPage, self).serve(request, *args, **kwargs)


def current_year():
return datetime.date.today().year


def max_value_current_year(value):
return MaxValueValidator(current_year())(value)


@register_public_site_setting
class InvestmentCategorySettings(BaseSiteSetting):
class Meta:
verbose_name = _("Investment Category Settings")

categories = models.ManyToManyField(
Category,
help_text=_("Select the categories that should be used in investments."),
)

panels = [
FieldPanel("categories"),
]


class InvestmentCategory(models.Model):
investment = models.ForeignKey(
"Investment", on_delete=models.CASCADE, related_name="categories"
)
name = models.CharField(max_length=255, null=True, blank=True)
value = models.CharField(max_length=255, null=True, blank=True)

def __str__(self):
return f"{self.investment}: {self.name}: {self.value}"


class InvestmentAdminForm(WagtailAdminModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request", None)
super().__init__(*args, **kwargs)
ics = InvestmentCategorySettings.for_request(self.request)
self.categories = ics.categories.all()
for category in self.categories:
field_name = category.name.lower().replace(" ", "_")
self.fields[field_name] = forms.ModelChoiceField(
required=False,
queryset=category.options.all(),
)
if self.instance.name:
try:
ic = InvestmentCategory.objects.get(
investment=self.instance, name=category.name
)
except InvestmentCategory.DoesNotExist:
pass
else:
self.initial[field_name] = Option.objects.get(value=ic.value)

def clean(self):
cleaned_data = super().clean()
return cleaned_data

def save(self, commit=True):
investment = super().save(commit)
for category in self.categories:
field_name = category.name.lower().replace(" ", "_")
value = self.cleaned_data[field_name].value
ic, _ = InvestmentCategory.objects.get_or_create(
investment=investment, name=category.name
)
ic.value = value
ic.save()
return investment


class Investment(models.Model):
partner = models.ForeignKey(
PartnerPage, on_delete=models.CASCADE, related_name="investments"
)
name = models.CharField(max_length=50)
year = models.IntegerField(
default=current_year,
validators=[MinValueValidator(1984), max_value_current_year],
help_text=_("Use format: <YYYY>"),
)
amount_committed = models.DecimalField(
decimal_places=2,
default=0,
max_digits=11,
verbose_name=_("Amount Committed ({currency})").format(
currency=babel.numbers.get_currency_symbol(
settings.CURRENCY_CODE, locale=settings.CURRENCY_LOCALE
).strip()
),
)
description = models.TextField()
application = models.OneToOneField(
ApplicationSubmission, on_delete=models.SET_NULL, blank=True, null=True
)

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

base_form_class = InvestmentAdminForm

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for category in self.categories.all():
field_name = category.name.lower().replace(" ", "_")
setattr(self, field_name, category.value)

def __str__(self):
return self.name
Loading

0 comments on commit 1f9aa29

Please sign in to comment.