From f8c7a867b9c624ce9319f71115c042a002b437bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20Farka?= <stepanfarka11@gmail.com> Date: Thu, 19 May 2022 08:29:39 +0200 Subject: [PATCH] [ADD] fourth amount, update widgets --- donate/forms.py | 7 ++- ...8_donatehomepage_form_amount_4_and_more.py | 55 +++++++++++++++++++ donate/models.py | 6 ++ donate/static/donate/assets/js/scripts.js | 26 ++++----- donate/templates/donate/donate_home_page.html | 16 +++--- donate/templates/donate/donate_info_page.html | 8 +-- .../templates/donate/donate_project_page.html | 4 +- .../donate/donate_project_page_coalition.html | 4 +- .../templates/donate/donate_region_page.html | 4 +- .../donate_targeted_donations_page.html | 22 ++++---- .../donate/form_amounts_snippet.html | 4 +- 11 files changed, 105 insertions(+), 51 deletions(-) create mode 100644 donate/migrations/0018_donatehomepage_form_amount_4_and_more.py diff --git a/donate/forms.py b/donate/forms.py index 67e73126..cd211ccf 100644 --- a/donate/forms.py +++ b/donate/forms.py @@ -5,12 +5,11 @@ from django.conf import settings class DonateForm(forms.Form): - CUSTOM_AMOUNT = -1 DEFAULT_CUSTOM_AMOUNT = 1000 ALLOWED_PERIODICITY = [730, 99999] PORTAL_ID_IN_SELECT = -1 - amount = forms.IntegerField() + amount = forms.IntegerField(required=False) custom_amount = forms.IntegerField(required=False) periodicity = forms.IntegerField() portal_project_id = forms.IntegerField() @@ -29,11 +28,13 @@ class DonateForm(forms.Form): and cleaned_data["select_portal_project_id"] is None ): raise forms.ValidationError("Není zadán účel daru.") + if not cleaned_data["amount"] and not cleaned_data["custom_amount"]: + raise forms.ValidationError("Nebyla zadána částka.") return cleaned_data def get_amount(self): amount = self.cleaned_data["amount"] - if amount == self.CUSTOM_AMOUNT: + if not amount: amount = ( abs(self.cleaned_data["custom_amount"]) or self.DEFAULT_CUSTOM_AMOUNT ) diff --git a/donate/migrations/0018_donatehomepage_form_amount_4_and_more.py b/donate/migrations/0018_donatehomepage_form_amount_4_and_more.py new file mode 100644 index 00000000..89c76bcb --- /dev/null +++ b/donate/migrations/0018_donatehomepage_form_amount_4_and_more.py @@ -0,0 +1,55 @@ +# Generated by Django 4.0.4 on 2022-05-18 13:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("donate", "0017_donatehomepage_title_suffix"), + ] + + operations = [ + migrations.AddField( + model_name="donatehomepage", + name="form_amount_4", + field=models.IntegerField(default=1000, verbose_name="pevná částka 4"), + ), + migrations.AddField( + model_name="donateprojectpage", + name="form_amount_4", + field=models.IntegerField(default=1000, verbose_name="pevná částka 4"), + ), + migrations.AddField( + model_name="donateregionpage", + name="form_amount_4", + field=models.IntegerField(default=1000, verbose_name="pevná částka 4"), + ), + migrations.AlterField( + model_name="donatehomepage", + name="form_preselected", + field=models.IntegerField( + choices=[(1, "první"), (2, "druhá"), (3, "třetí"), (4, "čtvrtá")], + default=1, + verbose_name="výchozí částka", + ), + ), + migrations.AlterField( + model_name="donateprojectpage", + name="form_preselected", + field=models.IntegerField( + choices=[(1, "první"), (2, "druhá"), (3, "třetí"), (4, "čtvrtá")], + default=1, + verbose_name="výchozí částka", + ), + ), + migrations.AlterField( + model_name="donateregionpage", + name="form_preselected", + field=models.IntegerField( + choices=[(1, "první"), (2, "druhá"), (3, "třetí"), (4, "čtvrtá")], + default=1, + verbose_name="výchozí částka", + ), + ), + ] diff --git a/donate/models.py b/donate/models.py index be9a55ab..81e99ee0 100644 --- a/donate/models.py +++ b/donate/models.py @@ -61,15 +61,18 @@ class DonateFormAmountsMixin(models.Model): FIRST = 1 SECOND = 2 THIRD = 3 + FOURTH = 4 FORM_CHOICES = [ (FIRST, "první"), (SECOND, "druhá"), (THIRD, "třetí"), + (FOURTH, "čtvrtá"), ] 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_amount_4 = models.IntegerField("pevná částka 4", default=1000) form_preselected = models.IntegerField( "výchozí částka", default=FIRST, choices=FORM_CHOICES ) @@ -164,6 +167,7 @@ class DonateHomePage( FieldPanel("form_amount_1"), FieldPanel("form_amount_2"), FieldPanel("form_amount_3"), + FieldPanel("form_amount_4"), FieldPanel("form_preselected"), ], "nastavení darů", @@ -291,6 +295,7 @@ class DonateRegionPage( FieldPanel("form_amount_1"), FieldPanel("form_amount_2"), FieldPanel("form_amount_3"), + FieldPanel("form_amount_4"), FieldPanel("form_preselected"), ], "nastavení darů", @@ -442,6 +447,7 @@ class DonateProjectPage( FieldPanel("form_amount_1"), FieldPanel("form_amount_2"), FieldPanel("form_amount_3"), + FieldPanel("form_amount_4"), FieldPanel("form_preselected"), ], "nastavení darů", diff --git a/donate/static/donate/assets/js/scripts.js b/donate/static/donate/assets/js/scripts.js index 49e387bb..f6134225 100644 --- a/donate/static/donate/assets/js/scripts.js +++ b/donate/static/donate/assets/js/scripts.js @@ -52,23 +52,19 @@ // On amount radio change $("input[name='amount']").change(function() { - - // If custom amount is selected - if($(this).attr('id') == 'amount4') { - - // Show custom amount input and set it required - $("#js-custom-amount-input").show(50); - $('#customamount').attr('required', true); - - } else { - - // Hide custom amount and remove required field - $("#js-custom-amount-input").hide(50); - $('#customamount').attr('required', false); - - } + const $customAmount = $('#customamount') + $customAmount.attr('required', false); + $customAmount.val(""); }); + $("input[name='custom_amount']").focus(function() { + $('#customamount').attr('required', true); + $( "#amount1" ).prop( "checked", false ); + $( "#amount2" ).prop( "checked", false ); + $( "#amount3" ).prop( "checked", false ); + $( "#amount4" ).prop( "checked", false ); + }) + // Trigger correct state onload $("input[name='amount']:checked").change(); diff --git a/donate/templates/donate/donate_home_page.html b/donate/templates/donate/donate_home_page.html index baed15e0..d03ff83e 100644 --- a/donate/templates/donate/donate_home_page.html +++ b/donate/templates/donate/donate_home_page.html @@ -72,21 +72,19 @@ {% 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;"> - <div class="offset-md-4 col-md-8"> - <div class="input-group input-group-lg mb-3 custom-amount"> - <input type="number" class="form-control" id="customamount" name="custom_amount" aria-describedby="customamount-currency"> + <div class="form-group row mb-0 align-items-center" id="js-custom-amount-input"> + <div class="col-md-4 order-md-0 order-1"> + <button type="submit" class="btn btn-danger btn-lg">Darovat</button> + </div> + <div class="col-md-8 mb-4 mb-md-0"> + <div class="input-group input-group-lg mb-0 custom-amount"> + <input type="number" class="form-control" id="customamount" placeholder="Jiná částka" name="custom_amount" aria-describedby="customamount-currency"> <div class="input-group-append"> <span class="input-group-text" id="customamount-currency">Kč</span> </div> </div> </div> </div> - <div class="form-group row mb-0"> - <div class="col-12"> - <button type="submit" class="btn btn-danger btn-lg">Darovat</button> - </div> - </div> </form> </div><!-- /donate-form__right --> diff --git a/donate/templates/donate/donate_info_page.html b/donate/templates/donate/donate_info_page.html index 7e35657a..3e8a762a 100644 --- a/donate/templates/donate/donate_info_page.html +++ b/donate/templates/donate/donate_info_page.html @@ -63,15 +63,15 @@ <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> + <input type="radio" id="amount4" name="amount" value="1500" class="custom-control-input"> + <label class="custom-control-label col-form-label-lg" for="amount4">1500 Kč</label> </div> </div> </div> - <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input" style="display: none;"> + <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input"> <div class="col-md-12"> <div class="input-group input-group-lg mb-3 custom-amount"> - <input type="number" class="form-control" id="customamount" name="custom_amount" aria-describedby="customamount-currency"> + <input type="number" class="form-control" id="customamount" placeholder="Jiná částka" name="custom_amount" aria-describedby="customamount-currency"> <div class="input-group-append"> <span class="input-group-text" id="customamount-currency">Kč</span> </div> diff --git a/donate/templates/donate/donate_project_page.html b/donate/templates/donate/donate_project_page.html index 58304e32..fadec300 100644 --- a/donate/templates/donate/donate_project_page.html +++ b/donate/templates/donate/donate_project_page.html @@ -104,10 +104,10 @@ {% 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;"> + <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input"> <div class="col-md-12"> <div class="input-group input-group-lg mb-3 custom-amount"> - <input type="number" class="form-control" id="customamount" name="custom_amount" aria-describedby="customamount-currency"> + <input type="number" class="form-control" id="customamount" placeholder="Jiná částka" name="custom_amount" aria-describedby="customamount-currency"> <div class="input-group-append"> <span class="input-group-text" id="customamount-currency">Kč</span> </div> diff --git a/donate/templates/donate/donate_project_page_coalition.html b/donate/templates/donate/donate_project_page_coalition.html index 952c62dc..b190b2af 100644 --- a/donate/templates/donate/donate_project_page_coalition.html +++ b/donate/templates/donate/donate_project_page_coalition.html @@ -106,10 +106,10 @@ {% 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;"> + <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input"> <div class="col-md-12"> <div class="input-group input-group-lg mb-3 custom-amount"> - <input type="number" class="form-control" id="customamount" name="custom_amount" aria-describedby="customamount-currency"> + <input type="number" class="form-control" id="customamount" placeholder="Jiná částka" name="custom_amount" aria-describedby="customamount-currency"> <div class="input-group-append"> <span class="input-group-text" id="customamount-currency">Kč</span> </div> diff --git a/donate/templates/donate/donate_region_page.html b/donate/templates/donate/donate_region_page.html index 20f7b4de..823f92de 100644 --- a/donate/templates/donate/donate_region_page.html +++ b/donate/templates/donate/donate_region_page.html @@ -60,10 +60,10 @@ {% 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;"> + <div class="form-group row mb-2 align-items-center" id="js-custom-amount-input"> <div class="col-md-12"> <div class="input-group input-group-lg mb-3 custom-amount"> - <input type="number" class="form-control" id="customamount" name="custom_amount" aria-describedby="customamount-currency"> + <input type="number" class="form-control" id="customamount" placeholder="Jiná částka" name="custom_amount" aria-describedby="customamount-currency"> <div class="input-group-append"> <span class="input-group-text" id="customamount-currency">Kč</span> </div> diff --git a/donate/templates/donate/donate_targeted_donations_page.html b/donate/templates/donate/donate_targeted_donations_page.html index b4464a2c..796425af 100644 --- a/donate/templates/donate/donate_targeted_donations_page.html +++ b/donate/templates/donate/donate_targeted_donations_page.html @@ -70,7 +70,7 @@ <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> + <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"> @@ -78,26 +78,24 @@ <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> + <input type="radio" id="amount4" name="amount" value="1500" class="custom-control-input"> + <label class="custom-control-label col-form-label-lg" for="amount4">1500 Kč</label> </div> </div> </div> - <div class="form-group row mb-4 align-items-center" id="js-custom-amount-input" style="display: none;"> - <div class="offset-md-3 col-md-3"> - <div class="input-group input-group-lg mb-3 custom-amount"> - <input type="number" class="form-control" id="customamount" name="custom_amount" aria-describedby="customamount-currency"> + <div class="form-group row mb-0 align-items-center" id="js-custom-amount-input"> + <div class="col-md-3 order-md-0 order-1"> + <button type="submit" class="btn btn-danger btn-lg">Darovat</button> + </div> + <div class="col-md-3 mb-4 mb-md-0"> + <div class="input-group input-group-lg mb-0 custom-amount"> + <input type="number" class="form-control" id="customamount" placeholder="Jiná částka" name="custom_amount" aria-describedby="customamount-currency"> <div class="input-group-append"> <span class="input-group-text" id="customamount-currency">Kč</span> </div> </div> </div> </div> - <div class="form-group row mb-0"> - <div class="col-12"> - <button type="submit" class="btn btn-danger btn-lg">Darovat</button> - </div> - </div> </form> <div class="mt-5"> diff --git a/donate/templates/donate/form_amounts_snippet.html b/donate/templates/donate/form_amounts_snippet.html index c6f0c43b..66cf49ea 100644 --- a/donate/templates/donate/form_amounts_snippet.html +++ b/donate/templates/donate/form_amounts_snippet.html @@ -11,6 +11,6 @@ <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> + <input type="radio" id="amount4" name="amount" value="{{ page.form_amount_4 }}" class="custom-control-input"{% if page.form_preselected == page.FOURTH %} checked{% endif %}> + <label class="custom-control-label col-form-label-lg" for="amount4">{{ page.form_amount_4 }} Kč</label> </div> -- GitLab