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.models import CoursePage, Course
from vbv_lernwelt.learnpath.models import LearningUnit
@ -13,20 +15,128 @@ def create_default_competence_profile():
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(
parent=competence_profile_page,
parent=CompetencePage.objects.get(competence_id='B1'),
competence_id='B1.3',
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'),
)
PerformanceCriteriaFactory(
parent=competence_profile_page,
parent=CompetencePage.objects.get(competence_id='B2'),
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.',
learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'),
)
PerformanceCriteriaFactory(
parent=competence_profile_page,
parent=CompetencePage.objects.get(competence_id='B2'),
competence_id='B2.2',
title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Risiken aufzuzeigen.',
learning_unit=LearningUnit.objects.get(slug='versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug'),

View File

@ -1,6 +1,6 @@
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):
@ -10,8 +10,16 @@ class CompetenceProfilePageFactory(wagtail_factories.PageFactory):
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):
competence_id = 'A.1'
competence_id = 'A1.1'
title = 'Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden'
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
import django.db.models.deletion
import wagtail.blocks
import wagtail.fields
class Migration(migrations.Migration):
@ -10,9 +12,22 @@ class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0069_log_entry_jsonfield'),
('learnpath', '0001_initial'),
]
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(
name='CompetenceProfilePage',
fields=[
@ -27,7 +42,8 @@ class Migration(migrations.Migration):
name='PerformanceCriteria',
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='')),
('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={
'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.utils.text import slugify
from wagtail import blocks
from wagtail.admin.panels import FieldPanel
from wagtail.fields import StreamField
from wagtail.models import Page
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):
parent_page_types = ['course.CoursePage']
subpage_types = ['competence.PerformanceCriteria']
subpage_types = ['competence.CompetencePage']
content_panels = [
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):
parent_page_types = ['competence.CompetenceProfilePage']
competence_id = models.TextField(default='')
competence_id = models.TextField(default='A1.1')
learning_unit = models.ForeignKey(
'learnpath.LearningUnit',
null=True,