Prototype implementation

This commit is contained in:
tegwick 2026-05-08 14:26:48 +02:00
parent 315143a6fc
commit 14b0bc6d01
160 changed files with 5731 additions and 42 deletions

View file

@ -0,0 +1,16 @@
from django.contrib import admin
from .models import Ausschreibungspassage, Marktbegleiter
@admin.register(Marktbegleiter)
class MarktbegleiterAdmin(admin.ModelAdmin):
list_display = ['name', 'vertraulichkeit', 'letzte_aktualisierung']
list_filter = ['vertraulichkeit']
search_fields = ['name']
@admin.register(Ausschreibungspassage)
class AusschreibungspassageAdmin(admin.ModelAdmin):
list_display = ['marktbegleiter', 'ausschreibung', 'verlaesslichkeitsscore', 'kategorie', 'erfassungsdatum']
list_filter = ['kategorie', 'marktbegleiter']

View file

@ -0,0 +1,5 @@
from django.apps import AppConfig
class MarktbegleiterConfig(AppConfig):
name = 'vergabe_teilnahme.apps.marktbegleiter'

View file

@ -0,0 +1,70 @@
# Generated by Django 6.0.5 on 2026-05-08 10:33
import django.core.validators
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('ausschreibungen', '0001_initial'),
('dokumente', '0002_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Marktbegleiter',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=300)),
('kurzbeschreibung', models.TextField(blank=True)),
('produkt_leistungsportfolio', models.TextField(blank=True)),
('relevante_branchen', models.TextField(blank=True)),
('bekannte_staerken', models.TextField(blank=True)),
('bekannte_schwaechen', models.TextField(blank=True)),
('typische_formulierungen', models.TextField(blank=True)),
('typische_leistungsmerkmale', models.TextField(blank=True)),
('bekannte_zertifizierungen', models.TextField(blank=True)),
('bekannte_referenzen', models.TextField(blank=True)),
('quellen_links', models.TextField(blank=True)),
('letzte_aktualisierung', models.DateField(blank=True, null=True)),
('aktualisierungsstatus', models.CharField(blank=True, max_length=50)),
('interne_notizen', models.TextField(blank=True)),
('vertraulichkeit', models.CharField(choices=[('intern', 'Intern'), ('streng_vertraulich', 'Streng vertraulich')], default='intern', max_length=20)),
],
options={
'verbose_name': 'Marktbegleiter',
'verbose_name_plural': 'Marktbegleiter',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Ausschreibungspassage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fundstelle', models.CharField(blank=True, max_length=200)),
('passage', models.TextField()),
('kategorie', models.CharField(blank=True, max_length=100)),
('begruendung_zuordnung', models.TextField(blank=True)),
('verlaesslichkeitsscore', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(10)])),
('auswirkung_entscheidung', models.TextField(blank=True)),
('auswirkung_preisstrategie', models.TextField(blank=True)),
('auswirkung_loesungskonzept', models.TextField(blank=True)),
('erfassungsdatum', models.DateField(auto_now_add=True)),
('ausschreibung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='passagen', to='ausschreibungen.ausschreibung')),
('dokument', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dokumente.dokument')),
('erfasst_von', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
('marktbegleiter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='passagen', to='marktbegleiter.marktbegleiter')),
],
options={
'verbose_name': 'Ausschreibungspassage',
'verbose_name_plural': 'Ausschreibungspassagen',
'ordering': ['-verlaesslichkeitsscore'],
},
),
]

View file

@ -0,0 +1,71 @@
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from vergabe_teilnahme.apps.core.models import FlexibleModel
class Marktbegleiter(FlexibleModel):
VERTRAULICHKEIT_CHOICES = [
('intern', 'Intern'),
('streng_vertraulich', 'Streng vertraulich'),
]
name = models.CharField(max_length=300)
kurzbeschreibung = models.TextField(blank=True)
produkt_leistungsportfolio = models.TextField(blank=True)
relevante_branchen = models.TextField(blank=True)
bekannte_staerken = models.TextField(blank=True)
bekannte_schwaechen = models.TextField(blank=True)
typische_formulierungen = models.TextField(blank=True)
typische_leistungsmerkmale = models.TextField(blank=True)
bekannte_zertifizierungen = models.TextField(blank=True)
bekannte_referenzen = models.TextField(blank=True)
quellen_links = models.TextField(blank=True)
letzte_aktualisierung = models.DateField(null=True, blank=True)
aktualisierungsstatus = models.CharField(max_length=50, blank=True)
interne_notizen = models.TextField(blank=True)
vertraulichkeit = models.CharField(
max_length=20, choices=VERTRAULICHKEIT_CHOICES, default='intern'
)
class Meta:
verbose_name = 'Marktbegleiter'
verbose_name_plural = 'Marktbegleiter'
ordering = ['name']
def __str__(self):
return self.name
class Ausschreibungspassage(FlexibleModel):
ausschreibung = models.ForeignKey(
'ausschreibungen.Ausschreibung', on_delete=models.CASCADE, related_name='passagen'
)
dokument = models.ForeignKey(
'dokumente.Dokument', on_delete=models.SET_NULL, null=True, blank=True
)
fundstelle = models.CharField(max_length=200, blank=True)
passage = models.TextField()
kategorie = models.CharField(max_length=100, blank=True)
marktbegleiter = models.ForeignKey(
Marktbegleiter, on_delete=models.CASCADE, related_name='passagen'
)
begruendung_zuordnung = models.TextField(blank=True)
verlaesslichkeitsscore = models.PositiveSmallIntegerField(
validators=[MinValueValidator(1), MaxValueValidator(10)]
)
auswirkung_entscheidung = models.TextField(blank=True)
auswirkung_preisstrategie = models.TextField(blank=True)
auswirkung_loesungskonzept = models.TextField(blank=True)
erfasst_von = models.ForeignKey(
'accounts.Mitarbeiter', on_delete=models.SET_NULL, null=True, blank=True
)
erfassungsdatum = models.DateField(auto_now_add=True)
class Meta:
verbose_name = 'Ausschreibungspassage'
verbose_name_plural = 'Ausschreibungspassagen'
ordering = ['-verlaesslichkeitsscore']
def __str__(self):
return f'{self.marktbegleiter}{self.passage[:60]}'

View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View file

@ -0,0 +1,2 @@
from django.urls import path
urlpatterns = []

View file

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.