Add CompetencePage

This commit is contained in:
Daniel Egger 2022-09-28 12:58:54 +02:00
parent 9be2fa0d3a
commit d5e484a6c7
5 changed files with 173 additions and 32 deletions

View File

@ -1,4 +1,6 @@
from vbv_lernwelt.competence.factories import CompetenceProfilePageFactory, PerformanceCriteriaFactory from vbv_lernwelt.competence.factories import CompetenceProfilePageFactory, PerformanceCriteriaFactory, \
CompetencePageFactory
from vbv_lernwelt.competence.models import CompetencePage
from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN
from vbv_lernwelt.course.models import CoursePage, Course from vbv_lernwelt.course.models import CoursePage, Course
from vbv_lernwelt.learnpath.models import LearningUnit from vbv_lernwelt.learnpath.models import LearningUnit
@ -13,20 +15,128 @@ def create_default_competence_profile():
parent=course_page, parent=course_page,
) )
competences = [{
'competence_id': 'A1',
'title': 'Weiterempfehlung für Neukunden generieren',
'items': [
'Verhandlungsgeschick',
'Überzeugtes Auftreten',
],
}, {
'competence_id': 'A2',
'title': 'Kundengespräche vereinbaren',
'items': [
'Gesprächsführung / Fragetechniken',
'Selbstorganisation',
'Arbeitstechniken',
'Psychologische Kenntnisse / Kommunikations-psychologie',
],
}, {
'competence_id': 'A3',
'title': 'Auftritt in den sozialen Medien zeitgemäss halten',
'items': [
'Gesetzliche und Compliance-Anforderungen der Versicherer',
'Datenschutzgesetz',
'Kommunikation in den sozialen Medien',
]
}, {
'competence_id': 'A4',
'title': 'Kundendaten erfassen',
'items': []
}, {
'competence_id': 'B1',
'title': 'Wünsche, Ziele und Bedürfnisse der Kunden im Gespräch ermitteln',
'items': [
'Gesprächsführung',
'Fragetechniken',
'Kundenpsychologie',
]
}, {
'competence_id': 'B2',
'title': 'Analyse des Kundenbedarfs und des Kundenbedürfnisses durchführen',
'items': [
'Fragetechniken',
'Visuelle Hilfsmittel / Visualisierungstechniken',
]
}, {
'competence_id': 'B3',
'title': 'Individuelle Lösungsvorschläge erarbeiten',
'items': [
'Fundierte Produktekenntnisse',
'Regulatorische Vorschriften',
]
}, {
'competence_id': 'B4',
'title': 'Lösungsvorschläge präsentieren und umsetzen',
'items': [
'Verhandlungsstrategien',
'Fundierte Produktkenntnisse',
'Visuelle Hilfsmittel / Visualisierungstechniken',
]
}, {
'competence_id': 'C1',
'title': 'Cross- und Upselling; bestehende fremdverwaltete Versicherungspolicen prüfen und in das Portfolio aufnehmen',
'items': [
'Produktkenntnisse',
'Gesprächsführung',
'Kommunikation',
'Fragetechnik',
'Verhandlungsgeschick',
'Vertragsrecht',
'Regulatorische Vorgaben',
'UVG, BVG, KVG, VVG',
]
}, {
'competence_id': 'C2',
'title': 'Änderungswünsche entgegennehmen und bestehende Verträge anpassen',
'items': [
'Produktkenntnisse',
'Gesprächsführung',
'Kommunikation',
'Fragetechnik',
'Verhandlungsgeschick',
'Vertragsrecht',
'Regulatorische Vorgaben',
'UVG, BVG, KVG, VVG',
]
}, {
'competence_id': 'C3',
'title': 'Kunden im Schadenfall unterstützen',
'items': []
}, {
'competence_id': 'C4',
'title': 'Bestehende Kunden pflegen',
'items': []
}, {
'competence_id': 'C5',
'title': 'Versicherungsanträge nachbearbeiten',
'items': []
}]
for c in competences:
CompetencePageFactory(
parent=competence_profile_page,
competence_id=c['competence_id'],
title=c['title'],
items=[
('item', i) for i in c['items']
]
)
PerformanceCriteriaFactory( PerformanceCriteriaFactory(
parent=competence_profile_page, parent=CompetencePage.objects.get(competence_id='B1'),
competence_id='B1.3', competence_id='B1.3',
title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).', title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).',
learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'), learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'),
) )
PerformanceCriteriaFactory( PerformanceCriteriaFactory(
parent=competence_profile_page, parent=CompetencePage.objects.get(competence_id='B2'),
competence_id='B2.1', competence_id='B2.1',
title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.', title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.',
learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'), learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'),
) )
PerformanceCriteriaFactory( PerformanceCriteriaFactory(
parent=competence_profile_page, parent=CompetencePage.objects.get(competence_id='B2'),
competence_id='B2.2', competence_id='B2.2',
title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Risiken aufzuzeigen.', title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Risiken aufzuzeigen.',
learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'), learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'),

View File

@ -1,6 +1,6 @@
import wagtail_factories import wagtail_factories
from vbv_lernwelt.competence.models import CompetenceProfilePage, PerformanceCriteria from vbv_lernwelt.competence.models import CompetenceProfilePage, PerformanceCriteria, CompetencePage
class CompetenceProfilePageFactory(wagtail_factories.PageFactory): class CompetenceProfilePageFactory(wagtail_factories.PageFactory):
@ -10,8 +10,16 @@ class CompetenceProfilePageFactory(wagtail_factories.PageFactory):
model = CompetenceProfilePage model = CompetenceProfilePage
class CompetencePageFactory(wagtail_factories.PageFactory):
competence_id = 'A1'
title = 'Weiterempfehlung für Neukunden generieren'
class Meta:
model = CompetencePage
class PerformanceCriteriaFactory(wagtail_factories.PageFactory): class PerformanceCriteriaFactory(wagtail_factories.PageFactory):
competence_id = 'A.1' competence_id = 'A1.1'
title = 'Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden' title = 'Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden'
class Meta: class Meta:

View File

@ -1,7 +1,9 @@
# Generated by Django 3.2.13 on 2022-09-28 10:30 # Generated by Django 3.2.13 on 2022-09-28 10:46
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import wagtail.blocks
import wagtail.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -10,9 +12,22 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('wagtailcore', '0069_log_entry_jsonfield'), ('wagtailcore', '0069_log_entry_jsonfield'),
('learnpath', '0001_initial'),
] ]
operations = [ operations = [
migrations.CreateModel(
name='CompetencePage',
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')),
('competence_id', models.TextField(default='A1')),
('items', wagtail.fields.StreamField([('item', wagtail.blocks.TextBlock())], use_json_field=True)),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
migrations.CreateModel( migrations.CreateModel(
name='CompetenceProfilePage', name='CompetenceProfilePage',
fields=[ fields=[
@ -27,7 +42,8 @@ class Migration(migrations.Migration):
name='PerformanceCriteria', name='PerformanceCriteria',
fields=[ 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')), ('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')),
('competence_id', models.TextField(default='')), ('competence_id', models.TextField(default='A1.1')),
('learning_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='learnpath.learningunit')),
], ],
options={ options={
'abstract': False, 'abstract': False,

View File

@ -1,22 +0,0 @@
# Generated by Django 3.2.13 on 2022-09-28 10:30
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('learnpath', '0001_initial'),
('competence', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='performancecriteria',
name='learning_unit',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='learnpath.learningunit'),
),
]

View File

@ -1,6 +1,8 @@
from django.db import models from django.db import models
from django.utils.text import slugify from django.utils.text import slugify
from wagtail import blocks
from wagtail.admin.panels import FieldPanel from wagtail.admin.panels import FieldPanel
from wagtail.fields import StreamField
from wagtail.models import Page from wagtail.models import Page
from vbv_lernwelt.core.model_utils import find_available_slug from vbv_lernwelt.core.model_utils import find_available_slug
@ -9,7 +11,7 @@ from vbv_lernwelt.learnpath.serializer_helpers import get_it_serializer_class
class CompetenceProfilePage(Page): class CompetenceProfilePage(Page):
parent_page_types = ['course.CoursePage'] parent_page_types = ['course.CoursePage']
subpage_types = ['competence.PerformanceCriteria'] subpage_types = ['competence.CompetencePage']
content_panels = [ content_panels = [
FieldPanel('title', classname="full title"), FieldPanel('title', classname="full title"),
@ -30,9 +32,36 @@ class CompetenceProfilePage(Page):
) )
class CompetencePage(Page):
parent_page_types = ['competence.CompetenceProfilePage']
subpage_types = ['competence.PerformanceCriteria']
competence_id = models.TextField(default='A1')
items = StreamField([
('item', blocks.TextBlock()),
], use_json_field=True)
content_panels = [
FieldPanel('title'),
FieldPanel('competence_id'),
]
def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(slugify(f"{self.get_parent().slug}-competence-{self.competence_id}", allow_unicode=True))
super(CompetencePage, self).full_clean(*args, **kwargs)
@classmethod
def get_serializer_class(cls):
return get_it_serializer_class(
cls, [
'id', 'title', 'slug', 'type', 'translation_key',
'children',
]
)
class PerformanceCriteria(Page): class PerformanceCriteria(Page):
parent_page_types = ['competence.CompetenceProfilePage'] parent_page_types = ['competence.CompetenceProfilePage']
competence_id = models.TextField(default='') competence_id = models.TextField(default='A1.1')
learning_unit = models.ForeignKey( learning_unit = models.ForeignKey(
'learnpath.LearningUnit', 'learnpath.LearningUnit',
null=True, null=True,