Add CompetencePage
This commit is contained in:
parent
9be2fa0d3a
commit
d5e484a6c7
|
|
@ -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'),
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue