Skip to content
Snippets Groups Projects
Commit d0b10d12 authored by jan.hamal.dvorak's avatar jan.hamal.dvorak Committed by jan.bednarik
Browse files

elections2021: Add banner order page

parent ad7d9ac2
Branches
No related tags found
2 merge requests!350Release,!349elections2021: Add banner orders and CSV export
# Generated by Django 3.2.5 on 2021-08-17 10:18
import django.db.models.deletion
import wagtail.contrib.routable_page.models
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.images.blocks
import wagtailmetadata.models
from django.db import migrations, models
import shared.models
class Migration(migrations.Migration):
dependencies = [
("wagtailimages", "0023_add_choose_permissions"),
("wagtailcore", "0062_comment_models_and_pagesubscription"),
("elections2021", "0036_auto_20210811_1505"),
]
operations = [
migrations.CreateModel(
name="BannerOrder",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("code", models.CharField(max_length=10)),
("name", models.CharField(max_length=35)),
("surname", models.CharField(max_length=70)),
("place_of_birth", models.CharField(max_length=70)),
("date_of_birth", models.DateField()),
("phone", models.CharField(max_length=20)),
("email", models.EmailField(max_length=70)),
],
),
migrations.CreateModel(
name="Elections2021BannerListPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"subtitle",
models.CharField(
blank=True, max_length=100, verbose_name="podtitulek"
),
),
(
"banners",
wagtail.core.fields.StreamField(
[
(
"banners",
wagtail.core.blocks.StructBlock(
[
(
"code",
wagtail.core.blocks.CharBlock(
label="kód banneru"
),
),
(
"candidate1",
wagtail.core.blocks.CharBlock(
label="první kandidát", required=False
),
),
(
"candidate2",
wagtail.core.blocks.CharBlock(
label="druhý kandidát", required=False
),
),
(
"tagline",
wagtail.core.blocks.CharBlock(
label="slogan", required=False
),
),
(
"preview",
wagtail.images.blocks.ImageChooserBlock(
label="náhled"
),
),
]
),
)
],
blank=True,
verbose_name="plachty",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Plachty",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
wagtail.contrib.routable_page.models.RoutablePageMixin,
"wagtailcore.page",
models.Model,
),
),
]
......@@ -302,6 +302,7 @@ class Elections2021HomePage(MetadataPageMixin, RoutablePageMixin, Page):
"elections2021.Elections2021DownloadsPage",
"elections2021.Elections2021GovernmentTeamPage",
"elections2021.Elections2021CalendarPage",
"elections2021.Elections2021BannerListPage",
]
### OTHERS
......@@ -2447,3 +2448,99 @@ class Elections2021CalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin,
event["pir"]["name"] = " ".join(pir_name)
return self.calendar
class BannerBlock(blocks.StructBlock):
code = blocks.CharBlock(label="kód banneru")
candidate1 = blocks.CharBlock(label="první kandidát", required=False)
candidate2 = blocks.CharBlock(label="druhý kandidát", required=False)
tagline = blocks.CharBlock(label="slogan", required=False)
preview = ImageChooserBlock(label="náhled")
class Meta:
label = "plachta"
icon = "flag"
template = "elections2021/_banner_block.html"
class BannerOrder(models.Model):
code = models.CharField(max_length=10)
name = models.CharField(max_length=35)
surname = models.CharField(max_length=70)
place_of_birth = models.CharField(max_length=70)
date_of_birth = models.DateField()
phone = models.CharField(max_length=20)
email = models.EmailField(max_length=70)
class BannerForm(forms.ModelForm):
class Meta:
model = BannerOrder
fields = [
"code",
"name",
"surname",
"place_of_birth",
"date_of_birth",
"phone",
"email",
]
class Elections2021BannerListPage(
SubpageMixin, MetadataPageMixin, RoutablePageMixin, Page
):
### FIELDS
subtitle = models.CharField(max_length=100, blank=True, verbose_name="podtitulek")
banners = StreamField(
[("banners", BannerBlock())], verbose_name="objednávání plachet", blank=True
)
### PANELS
content_panels = Page.content_panels + [
FieldPanel("subtitle"),
FieldPanel("banners"),
]
promote_panels = [
MultiFieldPanel(
[
FieldPanel("slug"),
FieldPanel("seo_title"),
FieldPanel("search_description"),
ImageChooserPanel("search_image"),
HelpPanel(help.build(help.NO_SEO_TITLE, NO_SEARCH_IMAGE_USE_PHOTO)),
],
gettext_lazy("Common page configuration"),
),
CommentPanel(),
]
settings_panels = []
### RELATIONS
parent_page_types = ["elections2021.Elections2021HomePage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "Plachty"
def serve(self, request, *a, **kw):
if request.method == "POST":
form = BannerForm(request.POST)
form.has_been_saved = False
if form.is_valid():
order = form.save()
form.has_been_saved = True
else:
form = BannerForm()
form.has_been_saved = False
request.banner_form = form
return super().serve(request, *a, **kw)
{% load static wagtailcore_tags wagtailimages_tags elections2021_extras %}
<h3 class="pb-2 font-bold text-lg flex flex-col justify-end" style="min-height: 3.5rem">
<p class="my-1 w-full">
{% if block.value.candidate1 and block.value.candidate2 %}
{{ block.value.candidate1 }} + {{ block.value.candidate2 }}
{% elif block.value.candidate1 %}
{{ block.value.candidate1 }}
{% elif block.value.candidate2 %}
{{ block.value.candidate2 }}
{% endif %}
</p>
<p class="my-1">{{ block.value.tagline }}</p>
</h3>
<div class="card bg-white text-black card--hoveractive">
{% image block.value.preview fill-800x412 %}
</div>
{% load wagtailcore_tags wagtailimages_tags %}
<div class="grid grid-cols-1 md:grid-cols-2">
{% for block in page.banners %}
{% if block.value.code != request.GET.code %}
<div class="col p-4 mb-8">
<a href="?code={{block.value.code|urlencode}}" class="block">
{% include_block block %}
</a>
</div>
{% endif %}
{% endfor %}
</div>
{% load wagtailimages_tags %}
{% for block in page.banners %}
{% if block.value.code == request.GET.code %}
<form class="mb-16 text-white bg-black p-4" method="POST" action="">
{% csrf_token %}
<div class="grid grid-cols-1 sm:grid-cols-2 gap-8">
<div class="col">
<h2 class="head-alt-sm mb-4">Objednáváte</h2>
<h3 class="pb-3 font-bold text-lg">
<p class="my-1">
{% if block.value.candidate1 and block.value.candidate2 %}
{{ block.value.candidate1 }} + {{ block.value.candidate2 }}
{% elif block.value.candidate1 %}
{{ block.value.candidate1 }}
{% elif block.value.candidate2 %}
{{ block.value.candidate2 }}
{% endif %}
</p>
<p class="my-1">{{ block.value.tagline }}</p>
</h3>
<div>{% image block.value.preview fill-800x412 %}</div>
</div>
<div class="col">
<h2 class="head-alt-sm mb-4">Informace o dárci</h2>
<div class="grid grid-cols-4 gap-4">
<div class="form-field col-span-2 form-field-required">
<label class="form-field__label" for="name">Jméno</label>
<div class="form-field__wrapper form-field__wrapper--shadowed {% if request.banner_form.errors.name %}form-field--error{% endif %}">
<input type="text" class="text-input form-field__control text-black" id="name" name="name" value="{{request.banner_form.name.value|default_if_none:""}}" placeholder="Jan" />
</div>
{% for error in request.banner_form.errors.name %}
<div class="form-field__error">{{error}}</div>
{% endfor %}
</div>
<div class="form-field col-span-2 form-field-required {% if request.banner_form.errors.surname %}form-field--error{% endif %}">
<label class="form-field__label" for="surname">Příjmení</label>
<div class="form-field__wrapper form-field__wrapper--shadowed">
<input type="text" class="text-input form-field__control text-black" id="surname" name="surname" value="{{request.banner_form.surname.value|default_if_none:""}}" placeholder="Vlaštovka" />
</div>
{% for error in request.banner_form.errors.surname %}
<div class="form-field__error">{{error}}</div>
{% endfor %}
</div>
<div class="form-field col-span-2 form-field-required {% if request.banner_form.errors.place_of_birth %}form-field--error{% endif %}">
<label class="form-field__label" for="place_of_birth">Místo narození</label>
<div class="form-field__wrapper form-field__wrapper--shadowed">
<input type="text" class="text-input form-field__control text-black" id="place_of_birth" name="place_of_birth" value="{{request.banner_form.place_of_birth.value|default_if_none:""}}" placeholder="Sedlíšťka" />
</div>
{% for error in request.banner_form.errors.place_of_birth %}
<div class="form-field__error">{{error}}</div>
{% endfor %}
</div>
<div class="form-field col-span-2 form-field-required {% if request.banner_form.errors.date_of_birth %}form-field--error{% endif %}">
<label class="form-field__label" for="date_of_birth">Datum narození</label>
<div class="form-field__wrapper form-field__wrapper--shadowed">
<input type="date" class="text-input form-field__control text-black" id="date_of_birth" name="date_of_birth" value="{{request.banner_form.date_of_birth.value|default_if_none:""}}" placeholder="1.1.1990" />
</div>
{% for error in request.banner_form.errors.date_of_birth %}
<div class="form-field__error">{{error}}</div>
{% endfor %}
</div>
</div>
<input type="hidden" name="code" value="{{request.GET.code|urlencode}}">
<p class="my-5">
Pokud nám pomůžete v&nbsp;kampani vyvěšením venkovní reklamy,
musíme o&nbsp;tomto Vašem nefinančním daru informovat stát,
který vaše údaje uveřejní.
</p>
<h2 class="head-alt-sm my-5">Kontaktní údaje</h2>
<div class="grid grid-cols-4 gap-4">
<div class="form-field col-span-2 form-field-required {% if request.banner_form.errors.phone %}form-field--error{% endif %}">
<label class="form-field__label" for="phone">Telefonní číslo</label>
<div class="form-field__wrapper form-field__wrapper--shadowed">
<input type="tel" class="text-input form-field__control text-black" id="phone" name="phone" value="{{request.banner_form.phone.value|default_if_none:""}}" placeholder="" />
</div>
{% for error in request.banner_form.errors.phone %}
<div class="form-field__error">{{error}}</div>
{% endfor %}
</div>
<div class="form-field col-span-2 form-field-required {% if request.banner_form.errors.email %}form-field--error{% endif %}">
<label class="form-field__label" for="email">Emailová adresa</label>
<div class="form-field__wrapper form-field__wrapper--shadowed">
<input type="email" class="text-input form-field__control text-black" id="email" name="email" value="{{request.banner_form.email.value|default_if_none:""}}" placeholder="" />
</div>
{% for error in request.banner_form.errors.email %}
<div class="form-field__error">{{error}}</div>
{% endfor %}
</div>
</div>
<p class="my-5">
Kontaktní údaje využijí naši koordinátoři k tomu, aby se s vámi
domluvili na podrobnostech předání. Po skončení této volební kampaně
vaše kontaktní údaje vymažeme.
</p>
<div class="mt-5 text-center lg:text-right">
<button class="btn text-lg max-w-full">
<div class="btn__body bg-white text-black">Souhlasím a objednávám</div>
</button>
</div>
</div>
</div>
</form>
{% endif %}
{% endfor %}
{% extends "elections2021/base.html" %}
{% load static wagtailcore_tags wagtailimages_tags %}
{% block content_header %}
<article class="relative bg-lemon md:bg-split-color px-4 md:pl-8 md:pr-0 2xl:px-8 hero py-0 w-full ">
<div class="2xl:container w-auto bg-lemon md:pl-20 pr-0 grid lg:grid-rows-1 h-40 sm:h-56 md:h-64 lg:grid-cols-7 items-center 2xl:mx-auto">
<div class="lg:row-span-1 lg:col-span-4 order-1 md:pr-20">
<h1 class="head-alt-md sm:head-alt-lg pt-1 max-w-xl">{{ page.title }}</h1>
<h2 class="head-alt-sm sm:head-alt-md pt-1 max-w-xl">{{ page.subtitle }}</h2>
</div>
<div class="text-center hidden lg:block lg:row-span-2 lg:col-span-3 order-2 h-full 2xl:right-0 2xl:text-right">
<i class="h-64 py-12 inline-block ico--bookmark banner__icon"></i>
</div>
</div>
</article>
{% endblock %}
{% block content %}
<div class="container container--default pt-8 pb-8 px-0 md:px-1">
{% if request.banner_form.has_been_saved %}
<div class="w-xl px-4 mt-8 mb-16">
<h2 class="head-alt-md">Děkujeme!</h2>
<p class="head-alt-sm w-xl mt-1">Vaše objednávka byla uložena.</p>
<p class="text-xl w-xl mt-4">Krajský koordinátor se s vámi co nejdříve spojí a domluví s vámi detaily.</p>
</div>
{% else %}
{% include "elections2021/banner_order_form.html" %}
{% include "elections2021/banner_list.html" %}
{% endif %}
</div>
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment