add a checkbox for free events

This commit is contained in:
2024-06-06 01:32:36 +02:00
parent 980e191c9f
commit a3c8095ed0
8 changed files with 103 additions and 32 deletions

View File

@ -0,0 +1,21 @@
function registerPricingPanelToggler() {
const checkbox = document.querySelector(
`input[type="checkbox"][id$="id_free"]`
);
const specificPricingPanel = document.querySelector(
`div#specific_pricing_panel`
);
function onChange() {
specificPricingPanel.style.display = checkbox.checked ? "none" : "block";
}
if (checkbox && specificPricingPanel) {
checkbox.addEventListener("change", () => onChange());
onChange();
}
}
document.addEventListener("DOMContentLoaded", () => {
registerPricingPanelToggler();
});

View File

@ -1,5 +1,7 @@
from django.contrib.admin.utils import quote
from django.templatetags.static import static
from django.urls import reverse
from django.utils.html import format_html
from wagtail import hooks
from wagtail.admin.menu import MenuItem
@ -47,3 +49,8 @@ def make_publish_default_action(menu_items, request, context):
menu_items.pop(index)
menu_items.insert(0, item)
break
@hooks.register("insert_editor_js")
def editor_js():
return format_html('<script src="{}"></script>', static("js/page-editor.js"))

View File

@ -0,0 +1,18 @@
# Generated by Django 5.0.6 on 2024-06-05 22:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('events', '0028_eventpage_pig_alter_eventpage_body'),
]
operations = [
migrations.AddField(
model_name='eventpage',
name='free',
field=models.BooleanField(default=False),
),
]

View File

@ -192,21 +192,28 @@ class EventPage(Page):
help_text="Lenke direkte til arrangementet på Facebook",
)
free = models.BooleanField(null=False, default=False)
price_regular = models.IntegerField(null=True, blank=True)
price_student = models.IntegerField(null=True, blank=True)
price_member = models.IntegerField(null=True, blank=True)
ticket_panels = [
FieldPanel("ticket_url", heading="Billettkjøpslenke"),
FieldRowPanel(
FieldPanel("free", heading="Gratis", help_text="Er dette arrangementet gratis for alle?"),
MultiFieldPanel(
children=[
FieldPanel("price_regular", heading="Ordinær pris"),
FieldPanel("price_student", heading="Pris for studenter"),
FieldPanel("price_member", heading="Pris for medlemmer av DNS"),
FieldRowPanel(
children=[
FieldPanel("price_regular", heading="Ordinær pris"),
FieldPanel("price_student", heading="Pris for studenter"),
FieldPanel("price_member", heading="Pris for medlemmer av DNS"),
],
help_text="",
),
HelpPanel(content="La alle prisfeltene stå tomme om arrangementet er gratis."),
],
help_text="",
attrs={"id": "specific_pricing_panel"},
),
HelpPanel(content="La alle prisfeltene stå tomme om arrangementet er gratis."),
FieldPanel("ticket_url", heading="Billettkjøpslenke"),
]
content_panels = Page.content_panels + [
@ -220,10 +227,7 @@ class EventPage(Page):
heading="Facebook-lenke",
help_text="Lenke direkte til arrangementet på Facebook.",
),
MultiFieldPanel(
heading="Priser og billettkjøp",
children=ticket_panels,
),
MultiFieldPanel(heading="Priser og billettkjøp", children=ticket_panels),
MultiFieldPanel(
children=[
HelpPanel(
@ -233,7 +237,7 @@ class EventPage(Page):
"legg inn hver dag som en egen forekomst."
),
),
InlinePanel("occurrences", min_num=1),
InlinePanel("occurrences", min_num=1, label="Forekomst"),
]
),
]
@ -244,6 +248,7 @@ class EventPage(Page):
GraphQLString("pig"),
GraphQLString("ticket_url"),
GraphQLString("facebook_url"),
GraphQLBoolean("free"),
GraphQLInt("price_regular"),
GraphQLInt("price_student"),
GraphQLInt("price_member"),
@ -270,6 +275,15 @@ class EventPage(Page):
),
]
def clean(self):
super().clean()
# if the event is free, all specific pricing is unset
if self.free:
self.price_regular = None
self.price_student = None
self.price_member = None
class EventOccurrence(Orderable):
event = ParentalKey(EventPage, on_delete=models.CASCADE, related_name="occurrences")