From e180d205ba5f2a449c4dd50a5a82e65f94e45a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com> Date: Fri, 15 Jan 2021 22:54:24 +0100 Subject: [PATCH] donate: Customizable amounts for home page and projects --- donate/migrations/0013_auto_20210115_2248.py | 61 ++++++++++++++++ donate/models.py | 72 +++++++++++++------ donate/templates/donate/donate_home_page.html | 17 +---- .../templates/donate/donate_project_page.html | 17 +---- .../templates/donate/donate_region_page.html | 17 +---- .../donate/form_amounts_snippet.html | 16 +++++ 6 files changed, 132 insertions(+), 68 deletions(-) create mode 100644 donate/migrations/0013_auto_20210115_2248.py create mode 100644 donate/templates/donate/form_amounts_snippet.html diff --git a/donate/migrations/0013_auto_20210115_2248.py b/donate/migrations/0013_auto_20210115_2248.py new file mode 100644 index 00000000..6c8ffe23 --- /dev/null +++ b/donate/migrations/0013_auto_20210115_2248.py @@ -0,0 +1,61 @@ +# Generated by Django 3.1.3 on 2021-01-15 21:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("donate", "0012_auto_20200915_0114"), + ] + + operations = [ + migrations.AddField( + model_name="donatehomepage", + name="form_amount_1", + field=models.IntegerField(default=100, verbose_name="pevná částka 1"), + ), + migrations.AddField( + model_name="donatehomepage", + name="form_amount_2", + field=models.IntegerField(default=200, verbose_name="pevná částka 2"), + ), + migrations.AddField( + model_name="donatehomepage", + name="form_amount_3", + field=models.IntegerField(default=500, verbose_name="pevná částka 3"), + ), + migrations.AddField( + model_name="donatehomepage", + name="form_preselected", + field=models.IntegerField( + choices=[(1, "prvnĂ"), (2, "druhá"), (3, "tĹ™etĂ")], + default=1, + verbose_name="vĂ˝chozà částka", + ), + ), + migrations.AddField( + model_name="donateregionpage", + name="form_amount_1", + field=models.IntegerField(default=100, verbose_name="pevná částka 1"), + ), + migrations.AddField( + model_name="donateregionpage", + name="form_amount_2", + field=models.IntegerField(default=200, verbose_name="pevná částka 2"), + ), + migrations.AddField( + model_name="donateregionpage", + name="form_amount_3", + field=models.IntegerField(default=500, verbose_name="pevná částka 3"), + ), + migrations.AddField( + model_name="donateregionpage", + name="form_preselected", + field=models.IntegerField( + choices=[(1, "prvnĂ"), (2, "druhá"), (3, "tĹ™etĂ")], + default=1, + verbose_name="vĂ˝chozà částka", + ), + ), + ] diff --git a/donate/models.py b/donate/models.py index e2aafa03..cf025d2e 100644 --- a/donate/models.py +++ b/donate/models.py @@ -65,6 +65,29 @@ class DonateFormMixin(models.Model): return bool(self.portal_project_id) +class DonateFormAmountsMixin(models.Model): + """Amounts setup for donate forms.""" + + FIRST = 1 + SECOND = 2 + THIRD = 3 + FORM_CHOICES = [ + (FIRST, "prvnĂ"), + (SECOND, "druhá"), + (THIRD, "tĹ™etĂ"), + ] + + form_amount_1 = models.IntegerField("pevná částka 1", default=100) + form_amount_2 = models.IntegerField("pevná částka 2", default=200) + form_amount_3 = models.IntegerField("pevná částka 3", default=500) + form_preselected = models.IntegerField( + "vĂ˝chozà částka", default=FIRST, choices=FORM_CHOICES + ) + + class Meta: + abstract = True + + def get_url(page, dest_page_type): try: return page.get_children().type(dest_page_type).live().first().get_url() @@ -72,7 +95,7 @@ def get_url(page, dest_page_type): return "#" -class DonateHomePage(DonateFormMixin, Page, MetadataPageMixin): +class DonateHomePage(DonateFormMixin, DonateFormAmountsMixin, Page, MetadataPageMixin): ### FIELDS # lead section @@ -155,7 +178,16 @@ class DonateHomePage(DonateFormMixin, Page, MetadataPageMixin): "sociálnĂ sĂtÄ›", ), FieldPanel("matomo_id"), - FieldPanel("portal_project_id"), + MultiFieldPanel( + [ + FieldPanel("portal_project_id"), + FieldPanel("form_amount_1"), + FieldPanel("form_amount_2"), + FieldPanel("form_amount_3"), + FieldPanel("form_preselected"), + ], + "nastavenĂ darĹŻ", + ), ] ### RELATIONS @@ -247,7 +279,9 @@ class DonateRegionIndexPage(Page, SubpageMixin, MetadataPageMixin): return context -class DonateRegionPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin): +class DonateRegionPage( + DonateFormMixin, DonateFormAmountsMixin, Page, SubpageMixin, MetadataPageMixin +): ### FIELDS main_title = models.CharField("hlavnĂ nadpis na stránce", max_length=250) @@ -279,7 +313,18 @@ class DonateRegionPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin): ), ] - settings_panels = [FieldPanel("portal_project_id")] + settings_panels = [ + MultiFieldPanel( + [ + FieldPanel("portal_project_id"), + FieldPanel("form_amount_1"), + FieldPanel("form_amount_2"), + FieldPanel("form_amount_3"), + FieldPanel("form_preselected"), + ], + "nastavenĂ darĹŻ", + ), + ] ### RELATIONS @@ -351,16 +396,9 @@ class DonateProjectIndexPage(Page, SubpageMixin, MetadataPageMixin): return context -class DonateProjectPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin): - FIRST = 1 - SECOND = 2 - THIRD = 3 - FORM_CHOICES = [ - (FIRST, "prvnĂ"), - (SECOND, "druhá"), - (THIRD, "tĹ™etĂ"), - ] - +class DonateProjectPage( + DonateFormMixin, DonateFormAmountsMixin, Page, SubpageMixin, MetadataPageMixin +): ### FIELDS date = models.DateField("běžà od") @@ -384,12 +422,6 @@ class DonateProjectPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin): ) expected_amount = models.IntegerField("oÄŤekávaná částka", blank=True, null=True) donated_amount = models.IntegerField("vybraná částka", blank=True, null=True) - form_amount_1 = models.IntegerField("pevná částka 1", default=100) - form_amount_2 = models.IntegerField("pevná částka 2", default=200) - form_amount_3 = models.IntegerField("pevná částka 3", default=500) - form_preselected = models.IntegerField( - "vĂ˝chozà částka", default=FIRST, choices=FORM_CHOICES - ) # we will use photo as search image search_image = None diff --git a/donate/templates/donate/donate_home_page.html b/donate/templates/donate/donate_home_page.html index ed690217..a27f8e40 100644 --- a/donate/templates/donate/donate_home_page.html +++ b/donate/templates/donate/donate_home_page.html @@ -69,22 +69,7 @@ <div class="form-group row mb-4 align-items-center"> <legend class="col-form-label col-md-4 col-form-label-lg">Částka</legend> <div class="col-md-8"> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount1" name="amount" value="200" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount1">200 KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount2" name="amount" value="500" class="custom-control-input" checked required> - <label class="custom-control-label col-form-label-lg" for="amount2">500 KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount3" name="amount" value="1000" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount3">1000 KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount4" name="amount" value="-1" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount4">Jiná částka</label> - </div> + {% include "donate/form_amounts_snippet.html" %} </div> </div> <div class="form-group row mb-4 align-items-center" id="js-custom-amount-input" style="display: none;"> diff --git a/donate/templates/donate/donate_project_page.html b/donate/templates/donate/donate_project_page.html index 34e90352..3b44ee88 100644 --- a/donate/templates/donate/donate_project_page.html +++ b/donate/templates/donate/donate_project_page.html @@ -99,22 +99,7 @@ <div class="form-group row mb-4 align-items-center"> <legend class="col-form-label col-md-12 col-form-label-lg">Částka</legend> <div class="col-md-12"> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount1" name="amount" value="{{ page.form_amount_1 }}" class="custom-control-input"{% if page.form_preselected == page.FIRST %} checked{% endif %}> - <label class="custom-control-label col-form-label-lg" for="amount1">{{ page.form_amount_1 }} KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount2" name="amount" value="{{ page.form_amount_2 }}" class="custom-control-input"{% if page.form_preselected == page.SECOND %} checked{% endif %}> - <label class="custom-control-label col-form-label-lg" for="amount2">{{ page.form_amount_2 }} KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount3" name="amount" value="{{ page.form_amount_3 }}" class="custom-control-input"{% if page.form_preselected == page.THIRD %} checked{% endif %}> - <label class="custom-control-label col-form-label-lg" for="amount3">{{ page.form_amount_3 }} KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount4" name="amount" value="-1" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount4">Jiná částka</label> - </div> + {% include "donate/form_amounts_snippet.html" %} </div> </div> <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input" style="display: none;"> diff --git a/donate/templates/donate/donate_region_page.html b/donate/templates/donate/donate_region_page.html index 6b82b5a8..9549d5c1 100644 --- a/donate/templates/donate/donate_region_page.html +++ b/donate/templates/donate/donate_region_page.html @@ -56,22 +56,7 @@ <div class="form-group row mb-4 align-items-center"> <legend class="col-form-label col-md-12 col-form-label-lg">Částka</legend> <div class="col-md-12"> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount1" name="amount" value="200" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount1">200 KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount2" name="amount" value="500" class="custom-control-input" checked> - <label class="custom-control-label col-form-label-lg" for="amount2">500 KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount3" name="amount" value="1000" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount3">1000 KÄŤ</label> - </div> - <div class="custom-control custom-radio custom-control-inline"> - <input type="radio" id="amount4" name="amount" value="-1" class="custom-control-input"> - <label class="custom-control-label col-form-label-lg" for="amount4">Jiná částka</label> - </div> + {% include "donate/form_amounts_snippet.html" %} </div> </div> <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input" style="display: none;"> diff --git a/donate/templates/donate/form_amounts_snippet.html b/donate/templates/donate/form_amounts_snippet.html new file mode 100644 index 00000000..c6f0c43b --- /dev/null +++ b/donate/templates/donate/form_amounts_snippet.html @@ -0,0 +1,16 @@ +<div class="custom-control custom-radio custom-control-inline"> + <input type="radio" id="amount1" name="amount" value="{{ page.form_amount_1 }}" class="custom-control-input"{% if page.form_preselected == page.FIRST %} checked{% endif %}> + <label class="custom-control-label col-form-label-lg" for="amount1">{{ page.form_amount_1 }} KÄŤ</label> +</div> +<div class="custom-control custom-radio custom-control-inline"> + <input type="radio" id="amount2" name="amount" value="{{ page.form_amount_2 }}" class="custom-control-input"{% if page.form_preselected == page.SECOND %} checked{% endif %}> + <label class="custom-control-label col-form-label-lg" for="amount2">{{ page.form_amount_2 }} KÄŤ</label> +</div> +<div class="custom-control custom-radio custom-control-inline"> + <input type="radio" id="amount3" name="amount" value="{{ page.form_amount_3 }}" class="custom-control-input"{% if page.form_preselected == page.THIRD %} checked{% endif %}> + <label class="custom-control-label col-form-label-lg" for="amount3">{{ page.form_amount_3 }} KÄŤ</label> +</div> +<div class="custom-control custom-radio custom-control-inline"> + <input type="radio" id="amount4" name="amount" value="-1" class="custom-control-input"> + <label class="custom-control-label col-form-label-lg" for="amount4">Jiná částka</label> +</div> -- GitLab