From ad65874d0d7766fa114c801e50b44102355283b1 Mon Sep 17 00:00:00 2001 From: Jarmil <jarmil.halamicek@seznam.cz> Date: Wed, 30 Sep 2020 13:29:34 +0200 Subject: [PATCH] Pruzne cilove skupiny u programovych bodu. Solves #20 --- .../migrations/0004_auto_20200930_1230.py | 66 +++++++++++++++++++ .../migrations/0005_auto_20200930_1328.py | 40 +++++++++++ program2021/models.py | 64 ++++++++++-------- .../program2021/program2021_point_page.html | 10 ++- program2021/wagtail_hooks.py | 18 +++++ 5 files changed, 164 insertions(+), 34 deletions(-) create mode 100644 program2021/migrations/0004_auto_20200930_1230.py create mode 100644 program2021/migrations/0005_auto_20200930_1328.py create mode 100644 program2021/wagtail_hooks.py diff --git a/program2021/migrations/0004_auto_20200930_1230.py b/program2021/migrations/0004_auto_20200930_1230.py new file mode 100644 index 00000000..6a3e2556 --- /dev/null +++ b/program2021/migrations/0004_auto_20200930_1230.py @@ -0,0 +1,66 @@ +# Generated by Django 3.1.1 on 2020-09-30 10:30 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("program2021", "0003_program2021pointpage_image_title"), + ] + + operations = [ + migrations.CreateModel( + name="Program2021TargetGroup", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name="Program2021TargetGroupBenefit", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("benefit", models.CharField(max_length=200)), + ( + "program_point", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="program2021.program2021pointpage", + ), + ), + ( + "target_group", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="program2021.program2021targetgroup", + ), + ), + ], + ), + migrations.AddField( + model_name="program2021pointpage", + name="benefits", + field=models.ManyToManyField( + through="program2021.Program2021TargetGroupBenefit", + to="program2021.Program2021TargetGroup", + ), + ), + ] diff --git a/program2021/migrations/0005_auto_20200930_1328.py b/program2021/migrations/0005_auto_20200930_1328.py new file mode 100644 index 00000000..2eab2e99 --- /dev/null +++ b/program2021/migrations/0005_auto_20200930_1328.py @@ -0,0 +1,40 @@ +# Generated by Django 3.1.1 on 2020-09-30 11:28 + +import django.db.models.deletion +import modelcluster.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("program2021", "0004_auto_20200930_1230"), + ] + + operations = [ + migrations.AlterModelOptions( + name="program2021targetgroup", + options={ + "verbose_name": "CĂlová skupina", + "verbose_name_plural": "CĂlovĂ© skupiny", + }, + ), + migrations.RemoveField( + model_name="program2021pointpage", name="benefits_companies", + ), + migrations.RemoveField( + model_name="program2021pointpage", name="benefits_public_money", + ), + migrations.RemoveField( + model_name="program2021pointpage", name="benefits_self_employed", + ), + migrations.AlterField( + model_name="program2021targetgroupbenefit", + name="program_point", + field=modelcluster.fields.ParentalKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="my_benefits", + to="program2021.program2021pointpage", + ), + ), + ] diff --git a/program2021/models.py b/program2021/models.py index d0f7eb24..501488a1 100644 --- a/program2021/models.py +++ b/program2021/models.py @@ -115,6 +115,31 @@ class Program2021PointPageTag(TaggedItemBase): ) +class Program2021TargetGroup(models.Model): + """ Ciselnik: cilove skupiny pro programove body """ + + name = models.CharField(max_length=200) + + panels = [FieldPanel("name")] + + def __str__(self): + return self.name + + class Meta: + verbose_name_plural = "CĂlovĂ© skupiny" + verbose_name = "CĂlová skupina" + + +class Program2021TargetGroupBenefit(models.Model): + """ Many2Many vazba programovy bod - cilova skupina. Popis, jaky benefit bod skupine prinese """ + + target_group = models.ForeignKey("Program2021TargetGroup", on_delete=models.CASCADE) + program_point = ParentalKey( + "Program2021PointPage", on_delete=models.CASCADE, related_name="my_benefits" + ) + benefit = models.CharField(max_length=200) + + class Program2021PointPage(Page, MetadataPageMixin): RICH_TEXT_FEATURES = ["bold", "italic", "ol", "ul", "link", "document-link"] @@ -150,27 +175,10 @@ class Program2021PointPage(Page, MetadataPageMixin): ideal = models.TextField( "ideál", max_length=280, blank=True, null=True, help_text="Max 280 znakĹŻ." ) - benefits_self_employed = models.TextField( - "benefity OSVÄŚ", - max_length=250, - blank=True, - null=True, - help_text="StruÄŤnĂ˝ popis dopadu na danou cĂlovou skupinu. Max 140 znakĹŻ.", - ) - benefits_companies = models.TextField( - "benefity firmy", - max_length=250, - blank=True, - null=True, - help_text="StruÄŤnĂ˝ popis dopadu na danou cĂlovou skupinu. Max 140 znakĹŻ.", - ) - benefits_public_money = models.TextField( - "benefity veĹ™ejnĂ© finance", - max_length=250, - blank=True, - null=True, - help_text="Rozpracuje tĂ˝m finance. Ăškolem finanÄŤnĂho tĂ˝mu nenĂ zpracovat to, ale dát k tomu metodiku a metodickou pomoc. V pĹ™ĂpadÄ› žádosti o pomoc se obracejte prosĂm na finanÄŤnĂho analytika poslaneckĂ©ho klubu Tomáše KopeÄŤnĂ©ho. Max 140 znakĹŻ.", + benefits = models.ManyToManyField( + Program2021TargetGroup, through=Program2021TargetGroupBenefit ) + already_done = RichTextField( "co jsme uĹľ udÄ›lali", max_length=1800, @@ -286,15 +294,15 @@ class Program2021PointPage(Page, MetadataPageMixin): benefits_content_panels = [ HelpPanel( - "V tĂ©to části rozpracováváme benefity tak, abychom je mohli souhrnnÄ› nabĂdnout danĂ© cĂlovĂ© skupinÄ›. NegativnĂ vÄ›ci zpracováváme typicky do ÄŤasto kladenĂ˝ch otázek dole. U negativ se však vĹľdy prezentuje i souvisejĂcĂ pĹ™Ănos (tzv. balĂÄŤkovacĂ zásada, napĹ™. snĂĹľĂme danÄ› z práce dĂky lepšĂmu zdanÄ›nĂ ziskĹŻ dnes vyvádÄ›nĂ˝ch do zahraniÄŤĂ), aby nikdo nemohl takovĂ˝ bod vytrhnout z kontextu a prezentovat proti nám." - ), - MultiFieldPanel( - [ - FieldPanel("benefits_self_employed"), - FieldPanel("benefits_companies"), - FieldPanel("benefits_public_money"), - ] + """ V tĂ©to části rozpracováváme benefity tak, abychom je mohli souhrnnÄ› nabĂdnout danĂ© cĂlovĂ© skupinÄ›. + NegativnĂ vÄ›ci zpracováváme typicky do ÄŤasto kladenĂ˝ch otázek dole. + U negativ se však vĹľdy prezentuje i souvisejĂcĂ pĹ™Ănos (tzv. balĂÄŤkovacĂ zásada, napĹ™. snĂĹľĂme danÄ› + z práce dĂky lepšĂmu zdanÄ›nĂ ziskĹŻ dnes vyvádÄ›nĂ˝ch do zahraniÄŤĂ), aby nikdo nemohl takovĂ˝ bod + vytrhnout z kontextu a prezentovat proti nám. + CĂlovĂ© skupiny mĹŻĹľete definovat z levĂ©ho menu. + """ ), + InlinePanel("my_benefits", label="Benefity"), ] faq_content_panels = [ diff --git a/program2021/templates/program2021/program2021_point_page.html b/program2021/templates/program2021/program2021_point_page.html index ea50b14b..b2f31550 100644 --- a/program2021/templates/program2021/program2021_point_page.html +++ b/program2021/templates/program2021/program2021_point_page.html @@ -57,12 +57,10 @@ <div class="col-md-6 pr-5"> <h3>Benefity</h3> - <h5 class="mt-4">OSVÄŚ</h5> - <p>{{ page.benefits_self_employed }}</p> - <h5 class="mt-4">Firmy</h5> - <p>{{ page.benefits_companies }}</p> - <h5 class="mt-4">VeĹ™ejnĂ© finance</h5> - <p>{{ page.benefits_public_money }}</p> + {% for benefit in page.my_benefits.all %} + <h5 class="mt-4">{{ benefit.target_group }}</h5> + <p>{{ benefit.benefit }}</p> + {% endfor %} </div> <div class="col-md-6 pl-5"> diff --git a/program2021/wagtail_hooks.py b/program2021/wagtail_hooks.py new file mode 100644 index 00000000..692e6fb3 --- /dev/null +++ b/program2021/wagtail_hooks.py @@ -0,0 +1,18 @@ +""" Pridani editace non-page modelu do wagtail administrace """ + +from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register + +from .models import Program2021TargetGroup + + +class TargetGroupAdmin(ModelAdmin): + model = Program2021TargetGroup + menu_icon = "group" + menu_order = 200 + add_to_settings_menu = False + exclude_from_explorer = False + list_display = ("name",) + search_fields = ("name",) + + +modeladmin_register(TargetGroupAdmin) -- GitLab