Skip to content
Snippets Groups Projects
Commit a59da545 authored by Štěpán Farka's avatar Štěpán Farka Committed by jan.bednarik
Browse files

[ADD] crowdfunding rewards

parent 6e29d558
No related branches found
No related tags found
2 merge requests!576Release,!573[ADD] crowdfunding rewards
from django.forms.utils import ErrorList
from wagtail.blocks import CharBlock, DateBlock, IntegerBlock, ListBlock, StructBlock
from wagtail.blocks.struct_block import StructBlockValidationError
from wagtail.images.blocks import ImageChooserBlock
class CrowdfundingVariantBlock(StructBlock):
reward_id = IntegerBlock(label="ID odměny")
title = CharBlock(
label="Název varianty", max_length=12, help_text="Například velikost: S"
)
class Meta:
icon = "radio-empty"
class CrowdfundingRewardBlock(StructBlock):
title = CharBlock(label="Název odměny")
description = CharBlock(label="Popis", max_length=255, required=False)
amount = IntegerBlock(label="Částka")
image = ImageChooserBlock(label="Obrázek")
delivery_date = DateBlock(label="Datum dodání", required=False)
reward_id = IntegerBlock(
label="ID odměny",
help_text="Vyplňte pouze v případě, že odměna nemá varianty",
required=False,
)
crm_product_description = CharBlock(
label="Popis produktu pro CRM",
help_text='Bude předán systému v parametru "product"',
required=False,
)
variant_list = ListBlock(
CrowdfundingVariantBlock(), label="Varianty", required=False
)
class Meta:
template = "donate/blocks/crowdfunding_reward_block.html"
icon = "pick"
label = "Odměna"
def clean(self, value):
errors = {}
if not value["reward_id"] and not value["variant_list"]:
errors["reward_id"] = ErrorList(["Musíte vyplnit ID odměny"])
raise StructBlockValidationError(errors)
return super().clean(value)
...@@ -10,9 +10,11 @@ class DonateForm(forms.Form): ...@@ -10,9 +10,11 @@ class DonateForm(forms.Form):
PORTAL_ID_IN_SELECT = -1 PORTAL_ID_IN_SELECT = -1
amount = forms.IntegerField(required=False) amount = forms.IntegerField(required=False)
crowdfunding = forms.IntegerField(required=False)
custom_amount = forms.IntegerField(required=False) custom_amount = forms.IntegerField(required=False)
periodicity = forms.IntegerField() periodicity = forms.IntegerField()
portal_project_id = forms.IntegerField() portal_project_id = forms.IntegerField()
product = forms.CharField(required=False)
select_portal_project_id = forms.IntegerField(required=False) select_portal_project_id = forms.IntegerField(required=False)
def clean_periodicity(self): def clean_periodicity(self):
...@@ -42,16 +44,26 @@ class DonateForm(forms.Form): ...@@ -42,16 +44,26 @@ class DonateForm(forms.Form):
def get_redirect_url(self): def get_redirect_url(self):
amount = self.get_amount() amount = self.get_amount()
crowdfunding = self.cleaned_data["crowdfunding"]
product = self.cleaned_data["product"]
periodicity = self.cleaned_data["periodicity"] periodicity = self.cleaned_data["periodicity"]
portal_project_id = self.cleaned_data["portal_project_id"] portal_project_id = self.cleaned_data["portal_project_id"]
if portal_project_id == self.PORTAL_ID_IN_SELECT: if portal_project_id == self.PORTAL_ID_IN_SELECT:
portal_project_id = self.cleaned_data["select_portal_project_id"] portal_project_id = self.cleaned_data["select_portal_project_id"]
query = urllib.parse.urlencode(
{ query_dict = {
"amount": amount, "amount": amount,
"periodicity": periodicity, "periodicity": periodicity,
"projectAccount": portal_project_id, "projectAccount": portal_project_id,
"source": settings.DONATE_PORTAL_REDIRECT_SOURCE, "source": settings.DONATE_PORTAL_REDIRECT_SOURCE,
} }
)
if crowdfunding:
query_dict.update(crowdfunding=crowdfunding)
if product:
query_dict.update(product=product)
query = urllib.parse.urlencode(query_dict)
return f"{settings.DONATE_PORTAL_REDIRECT_URL}?{query}" return f"{settings.DONATE_PORTAL_REDIRECT_URL}?{query}"
# Generated by Django 4.0.4 on 2022-07-26 10:35
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("donate", "0023_donatesecretpreviewpage"),
]
operations = [
migrations.AddField(
model_name="donateprojectpage",
name="crowdfunding",
field=wagtail.fields.StreamField(
[
(
"reward_block",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(label="Název odměny"),
),
(
"description",
wagtail.blocks.CharBlock(
label="Popis", max_length=255, required=False
),
),
("amount", wagtail.blocks.IntegerBlock(label="Částka")),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek"
),
),
(
"delivery_date",
wagtail.blocks.DateBlock(
label="Datum dodání", required=False
),
),
(
"reward_id",
wagtail.blocks.IntegerBlock(
help_text="Vyplňte pouze v případě, že odměna nemá varianty",
label="ID odměny",
required=False,
),
),
(
"crm_product_description",
wagtail.blocks.CharBlock(
help_text='Bude předán systému v parametru "product"',
label="Popis produktu pro CRM",
required=False,
),
),
(
"variant_list",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"reward_id",
wagtail.blocks.IntegerBlock(
label="ID odměny"
),
),
(
"title",
wagtail.blocks.CharBlock(
help_text="Například velikost: S",
label="Název varianty",
max_length=12,
),
),
]
),
label="Varianty",
required=False,
),
),
]
),
)
],
blank=True,
use_json_field=None,
verbose_name="Crowdfunding bloky",
),
),
]
...@@ -27,6 +27,7 @@ from shared.models import ( ...@@ -27,6 +27,7 @@ from shared.models import (
from shared.utils import get_subpage_url, make_promote_panels from shared.utils import get_subpage_url, make_promote_panels
from tuning import admin_help from tuning import admin_help
from .blocks import CrowdfundingRewardBlock
from .forms import DonateForm from .forms import DonateForm
from .utils import get_donated_amount_from_api from .utils import get_donated_amount_from_api
...@@ -461,6 +462,12 @@ class DonateProjectPage( ...@@ -461,6 +462,12 @@ class DonateProjectPage(
# we will use photo as search image # we will use photo as search image
search_image = None search_image = None
crowdfunding = StreamField(
[("reward_block", CrowdfundingRewardBlock())],
verbose_name="Crowdfunding bloky",
blank=True,
)
### PANELS ### PANELS
content_panels = Page.content_panels + [ content_panels = Page.content_panels + [
...@@ -503,6 +510,12 @@ class DonateProjectPage( ...@@ -503,6 +510,12 @@ class DonateProjectPage(
], ],
"nastavení darů", "nastavení darů",
), ),
MultiFieldPanel(
[
FieldPanel("crowdfunding"),
],
"Nastavení crowdfundingových odměn",
),
FieldPanel("coalition_design"), FieldPanel("coalition_design"),
] ]
......
{% load wagtailimages_tags %}
<div class="project-donate-form project-donate-form__right mb-3">
<form method="post">
{% csrf_token %}
<input type="hidden" name="portal_project_id" value="{{ page.portal_project_id }}">
<input type="hidden" name="periodicity" value="99999">
<input type="hidden" name="amount" value="{{ self.amount }}">
<input type="hidden" name="product" value="{{ self.crm_product_description }}">
<h3 class="lead mb-3">{{ self.title }}</h3>
<div class="row">
<figure class="col-12 col-md-7">
{% image self.image fill-500x800 as img %}
<img src="{{ img.url }}" alt="{{ img.alt }}" class="w-100">
</figure>
<div class="col-12 col-md-5">
{{ self.description }}<br>
{% if self.variant_list %}
<small>Zvolte si varaintu:</small>
{% for variant in self.variant_list %}
<div class="custom-control form-control-md custom-radio">
<input type="radio" id="reward-{{ variant.reward_id }}" name="crowdfunding"
value="{{ variant.reward_id }}"
class="custom-control-input form-control-md" required>
<label class="custom-control-label col-form-label-lg"
for="reward-{{ variant.reward_id }}">{{ variant.title }}</label>
</div>
{% endfor %}
{% else %}
<input id="reward-{{ self.reward_id }}" name="crowdfunding"
value="{{ self.reward_id }}" hidden
class="custom-control-input form-control-md" required>
{% endif %}
</div>
</div>
<div class="row mt-2">
<div class="col-7 mb-2 mb-md-0">
<button type="submit" class="btn btn-danger btn-md">Darovat {{ self.amount }}&nbsp;</button>
</div>
<p class="col-12 col-md-5">
Dodání do: <br>
<time datetime="2019-06-18">{{ self.delivery_date|date:"d. m. Y" }}</time>
</p>
</div>
</form>
</div>
...@@ -99,7 +99,13 @@ ...@@ -99,7 +99,13 @@
<input type="hidden" name="periodicity" value="99999"> <input type="hidden" name="periodicity" value="99999">
{% endif %} {% endif %}
<div class="form-group row mb-4 align-items-center"> <div class="form-group row mb-4 align-items-center">
<legend class="col-form-label col-md-12 col-form-label-lg">Částka</legend> <legend class="col-form-label col-md-12 col-form-label-lg">
{% if self.crowdfunding %}
Částka bez odměny
{% else %}
Částka
{% endif %}
</legend>
<div class="col-md-12"> <div class="col-md-12">
{% if page.allow_periodic_donations %} {% if page.allow_periodic_donations %}
<div id="monthlyAmounts" data-default-selected="{{ page.form_monthly_preselected }}"> <div id="monthlyAmounts" data-default-selected="{{ page.form_monthly_preselected }}">
...@@ -135,6 +141,9 @@ ...@@ -135,6 +141,9 @@
</div><!-- /project-donate-form__right --> </div><!-- /project-donate-form__right -->
</div> </div>
{% for block in self.crowdfunding %}
{% include_block block %}
{% endfor %}
</div> </div>
</div><!-- /column --> </div><!-- /column -->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment