Modelclasses für Absatzmärkte und Umsatz und Maßnahmen angelegt

master
Ulf Wagner 1 year ago
parent 45396364bf
commit 9a086f6ed5
  1. 1
      UGSdjangoProject/UGSdjangoProject/settings.py
  2. 2
      UGSdjangoProject/static/main.js
  3. 51
      UGSdjangoProject/ugssim/fixtures/databaseinit.json
  4. 37
      UGSdjangoProject/ugssim/form.py
  5. 33
      UGSdjangoProject/ugssim/migrations/0001_initial.py
  6. 26
      UGSdjangoProject/ugssim/migrations/0001_initial.py.org
  7. 65
      UGSdjangoProject/ugssim/migrations/0002_allgemeinesdata_remove_address_vorname_and_more.py
  8. 25
      UGSdjangoProject/ugssim/migrations/0002_remove_address_id_alter_address_user.py
  9. 50
      UGSdjangoProject/ugssim/migrations/0002_salesarea_salesareatype_summary_companydata_and_more.py.org
  10. 23
      UGSdjangoProject/ugssim/migrations/0003_alter_address_postleitzahl_alter_address_street.py.org
  11. 49
      UGSdjangoProject/ugssim/migrations/0003_commondata_delete_allgemeinesdata_and_more.py
  12. 54
      UGSdjangoProject/ugssim/migrations/0003_remove_address_geburtstag_remove_address_hausnummer_and_more.py
  13. 43
      UGSdjangoProject/ugssim/migrations/0004_alter_commondata_currency_and_more.py
  14. 22
      UGSdjangoProject/ugssim/migrations/0004_summary_user.py
  15. 133
      UGSdjangoProject/ugssim/migrations/0005_company_currency_earningsperiod_numberpresentation_and_more.py
  16. 94
      UGSdjangoProject/ugssim/models.py
  17. 24
      UGSdjangoProject/ugssim/templates/planungsparameter/planungsparameter.html
  18. 10
      UGSdjangoProject/ugssim/templates/ugssim/navigation.html
  19. 36
      UGSdjangoProject/ugssim/views.py

@ -36,6 +36,7 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'ugssim.apps.UgssimConfig', 'ugssim.apps.UgssimConfig',
'django_extensions',
] ]
MIDDLEWARE = [ MIDDLEWARE = [

@ -14,7 +14,7 @@ function convertToJsonDict(form) {
return formData; return formData;
} }
const saveAddress = (htmlform) => { const savePlanningparameter = (htmlform) => {
let headers = { let headers = {
'X-Requested-With': 'XMLHttpRequest', 'X-Requested-With': 'XMLHttpRequest',

@ -0,0 +1,51 @@
[
{
"model": "ugssim.PeriodTypes",
"pk": 1,
"fields" : {
"title": "Monatlich"
}
},
{
"model": "ugssim.PeriodTypes",
"pk": 2,
"fields" : {
"title": "Quartalsweise"
}
},
{
"model": "ugssim.PeriodTypes",
"pk": 3,
"fields" : {
"title": "Jahr"
}
},
{
"model": "ugssim.SalesAreaType",
"pk": 1,
"fields" : {
"title": "Produktion"
}
},
{
"model": "ugssim.SalesAreaType",
"pk": 2,
"fields" : {
"title": "Handel"
}
},
{
"model": "ugssim.SalesAreaType",
"pk": 3,
"fields" : {
"title": "Dienstleistung"
}
},
{
"model": "ugssim.SalesAreaType",
"pk": 4,
"fields" : {
"title": "Handwerk"
}
}
]

@ -7,7 +7,11 @@ from django import forms
class UGSModelForm(forms.ModelForm): class UGSModelForm(forms.ModelForm):
heading = "Neuer Abschnitt"
description = "To Fill"
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs) super(forms.ModelForm, self).__init__(*args, **kwargs)
# 'description should be the first field # 'description should be the first field
# value = self.fields.pop('description') # value = self.fields.pop('description')
@ -25,6 +29,9 @@ class UGSModelForm(forms.ModelForm):
class AddressForm(UGSModelForm): class AddressForm(UGSModelForm):
heading = "Mandantendaten"
description = ""
class Meta: class Meta:
model = Address model = Address
# die ID muss hier wieder rein, weil sonst die Zuordnung nicht klappt oder die user ID muss primaery key werden # die ID muss hier wieder rein, weil sonst die Zuordnung nicht klappt oder die user ID muss primaery key werden
@ -36,29 +43,30 @@ class AddressForm(UGSModelForm):
'type': 'date' 'type': 'date'
} }
), ),
#'user': forms.HiddenInput()
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Fügt onchange zu allen Formularfeldern hinzu. # Fügt onchange zu allen Formularfeldern hinzu.
for field in self.fields: for field in self.fields:
self.fields[field].widget.attrs.update({'onchange': 'saveAddress(this.form)'}) self.fields[field].widget.attrs.update({'onchange': 'savePlanningparameter(this.form)'})
# self.fields['user'].queryset = User.objects.none()
class SummaryForm(UGSModelForm): class SummaryForm(UGSModelForm):
heading = "Zusammenfassung"
description = ""
class Meta: class Meta:
model = Summary model = Summary
fields = '__all__' fields = '__all__'
widgets = { widgets = {
'text': forms.Textarea(attrs={'rows': 10}) 'text': forms.Textarea(attrs={'rows': 10})
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Fügt onchange zu allen Formularfeldern hinzu. # Fügt onchange zu allen Formularfeldern hinzu.
for field in self.fields: for field in self.fields:
self.fields[field].widget.attrs.update({'onchange': 'saveAddress(this.form)'}) self.fields[field].widget.attrs.update({'onchange': 'savePlanningparameter(this.form)'})
class SalesAreaTypeForm(UGSModelForm): class SalesAreaTypeForm(UGSModelForm):
@ -73,7 +81,24 @@ class SalesAreaForm(UGSModelForm):
fields = '__all__' fields = '__all__'
class CompanyDataForm(UGSModelForm): class CompanyForm(UGSModelForm):
heading = "Firmendaten"
description = ""
class Meta: class Meta:
model = CompanyData model = Company
fields = '__all__' fields = '__all__'
widgets = {
'startDate': forms.DateInput(
format='%Y-%m-%m',
attrs={
'type': 'date'
}
)
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Fügt onchange zu allen Formularfeldern hinzu.
for field in self.fields:
self.fields[field].widget.attrs.update({'onchange': 'savePlanningparameter(this.form)'})

@ -1,7 +1,8 @@
# Generated by Django 5.0.1 on 2024-03-14 13:26 # Generated by Django 4.1.2 on 2024-09-16 12:13
import django.db.models.deletion from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -9,19 +10,18 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Address', name='AllgemeinesData',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('vorname', models.CharField(max_length=255)), ('currency', models.CharField(max_length=3)),
('nachname', models.CharField(max_length=255)), ('years', models.IntegerField()),
('geburtstag', models.DateField()), ('startPhase', models.IntegerField()),
('street', models.CharField(max_length=10)), ('planingPeriods', models.IntegerField()),
('hausnummer', models.CharField(max_length=255)),
('postleitzahl', models.CharField(max_length=5)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -45,6 +45,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('text', models.TextField(max_length=2000)), ('text', models.TextField(max_length=2000)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_summary', to=settings.AUTH_USER_MODEL)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -55,4 +56,18 @@ class Migration(migrations.Migration):
('type', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='ugssim.salesareatype')), ('type', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='ugssim.salesareatype')),
], ],
), ),
migrations.CreateModel(
name='Address',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=255, null=True, verbose_name='Vorname')),
('surname', models.CharField(max_length=255, null=True, verbose_name='Nachname')),
('birthday', models.DateField(null=True, verbose_name='Geburtstag')),
('street', models.CharField(max_length=255, null=True, verbose_name='Straße')),
('number', models.CharField(max_length=10, null=True, verbose_name='Hausnummer')),
('postcode', models.CharField(max_length=5, null=True, verbose_name='Postleitzahl')),
('city', models.CharField(max_length=100, null=True, verbose_name='Stadt')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
] ]

@ -1,26 +0,0 @@
# Generated by Django 5.0.1 on 2024-03-06 10:00
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Address',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('vorname', models.CharField(max_length=255)),
('nachname', models.CharField(max_length=255)),
('geburtstag', models.DateField()),
('street', models.CharField(max_length=255)),
('hausnummer', models.CharField(max_length=255)),
('postleitzahl', models.PositiveIntegerField()),
],
),
]

@ -1,65 +0,0 @@
# Generated by Django 4.1.2 on 2024-09-10 07:02
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ugssim', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='AllgemeinesData',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('currency', models.CharField(max_length=3)),
('years', models.IntegerField()),
('startPhase', models.IntegerField()),
('planingPeriods', models.IntegerField()),
],
),
migrations.RemoveField(
model_name='address',
name='vorname',
),
migrations.AddField(
model_name='address',
name='first_name',
field=models.CharField(max_length=255, null=True, verbose_name='Vorname'),
),
migrations.AddField(
model_name='address',
name='user',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='new_spending', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='address',
name='geburtstag',
field=models.DateField(null=True),
),
migrations.AlterField(
model_name='address',
name='hausnummer',
field=models.CharField(max_length=10, null=True),
),
migrations.AlterField(
model_name='address',
name='nachname',
field=models.CharField(max_length=255, null=True),
),
migrations.AlterField(
model_name='address',
name='postleitzahl',
field=models.CharField(max_length=5, null=True),
),
migrations.AlterField(
model_name='address',
name='street',
field=models.CharField(max_length=255, null=True, verbose_name='Straße'),
),
]

@ -0,0 +1,25 @@
# Generated by Django 4.1.2 on 2024-09-16 12:20
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ugssim', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='address',
name='id',
),
migrations.AlterField(
model_name='address',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL),
),
]

@ -1,50 +0,0 @@
# Generated by Django 5.0.1 on 2024-03-12 16:10
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ugssim', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='SalesArea',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name='SalesAreaType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name='Summary',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('text', models.TextField(max_length=2000)),
],
),
migrations.CreateModel(
name='CompanyData',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255)),
('website', models.URLField()),
('startDate', models.DateField()),
('salesArea', models.ManyToManyField(related_name='+', to='ugssim.salesarea')),
],
),
migrations.AddField(
model_name='salesarea',
name='type',
field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='ugssim.salesareatype'),
),
]

@ -1,23 +0,0 @@
# Generated by Django 5.0.1 on 2024-03-13 10:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ugssim', '0002_salesarea_salesareatype_summary_companydata_and_more'),
]
operations = [
migrations.AlterField(
model_name='address',
name='postleitzahl',
field=models.CharField(max_length=5),
),
migrations.AlterField(
model_name='address',
name='street',
field=models.CharField(max_length=10),
),
]

@ -0,0 +1,49 @@
# Generated by Django 4.1.2 on 2024-09-17 09:17
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ugssim', '0002_remove_address_id_alter_address_user'),
]
operations = [
migrations.CreateModel(
name='CommonData',
fields=[
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
('currency', models.CharField(max_length=3)),
('years', models.IntegerField()),
('startPhase', models.IntegerField()),
('planingPeriods', models.IntegerField()),
],
),
migrations.DeleteModel(
name='AllgemeinesData',
),
migrations.RemoveField(
model_name='companydata',
name='id',
),
migrations.RemoveField(
model_name='summary',
name='id',
),
migrations.AddField(
model_name='companydata',
name='user',
field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
migrations.AlterField(
model_name='summary',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL),
),
]

@ -1,54 +0,0 @@
# Generated by Django 4.1.2 on 2024-09-10 10:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ugssim', '0002_allgemeinesdata_remove_address_vorname_and_more'),
]
operations = [
migrations.RemoveField(
model_name='address',
name='geburtstag',
),
migrations.RemoveField(
model_name='address',
name='hausnummer',
),
migrations.RemoveField(
model_name='address',
name='nachname',
),
migrations.RemoveField(
model_name='address',
name='postleitzahl',
),
migrations.AddField(
model_name='address',
name='birthday',
field=models.DateField(null=True, verbose_name='Geburtstag'),
),
migrations.AddField(
model_name='address',
name='city',
field=models.CharField(max_length=100, null=True, verbose_name='Stadt'),
),
migrations.AddField(
model_name='address',
name='number',
field=models.CharField(max_length=10, null=True, verbose_name='Hausnummer'),
),
migrations.AddField(
model_name='address',
name='postcode',
field=models.CharField(max_length=5, null=True, verbose_name='Postleitzahl'),
),
migrations.AddField(
model_name='address',
name='surname',
field=models.CharField(max_length=255, null=True, verbose_name='Nachname'),
),
]

@ -0,0 +1,43 @@
# Generated by Django 4.1.2 on 2024-09-17 09:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ugssim', '0003_commondata_delete_allgemeinesdata_and_more'),
]
operations = [
migrations.AlterField(
model_name='commondata',
name='currency',
field=models.CharField(max_length=3, null=True),
),
migrations.AlterField(
model_name='commondata',
name='startPhase',
field=models.IntegerField(null=True, verbose_name='Startphase in Monaten'),
),
migrations.AlterField(
model_name='commondata',
name='years',
field=models.IntegerField(null=True, verbose_name='Laufzeit in Jahren'),
),
migrations.AlterField(
model_name='companydata',
name='startDate',
field=models.DateField(null=True, verbose_name='Startdatum'),
),
migrations.AlterField(
model_name='companydata',
name='title',
field=models.CharField(max_length=255, null=True, verbose_name='Beschreibung'),
),
migrations.AlterField(
model_name='companydata',
name='website',
field=models.URLField(null=True, verbose_name='Webseite'),
),
]

@ -1,22 +0,0 @@
# Generated by Django 4.1.2 on 2024-09-12 14:48
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ugssim', '0003_remove_address_geburtstag_remove_address_hausnummer_and_more'),
]
operations = [
migrations.AddField(
model_name='summary',
name='user',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='user_summary', to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
]

@ -0,0 +1,133 @@
# Generated by Django 4.1.2 on 2024-09-17 14:16
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import month.models
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('ugssim', '0004_alter_commondata_currency_and_more'),
]
operations = [
migrations.CreateModel(
name='Company',
fields=[
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
('title', models.CharField(max_length=255, null=True, verbose_name='Beschreibung')),
('website', models.URLField(null=True, verbose_name='Webseite')),
('startMonth', month.models.MonthField(verbose_name='Starttermin')),
('numberOfSalesAreas', models.IntegerField(null=True, verbose_name='Anzahl der Umsatzbereiche')),
],
),
migrations.CreateModel(
name='Currency',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=3)),
],
),
migrations.CreateModel(
name='EarningsPeriod',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=20)),
],
),
migrations.CreateModel(
name='NumberPresentation',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=20)),
],
),
migrations.CreateModel(
name='OperationalAction',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('salesdependent', models.BooleanField(default=False)),
('month', models.IntegerField()),
('ammount', models.DecimalField(decimal_places=2, max_digits=10)),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='OperationalActions', to='ugssim.company')),
],
),
migrations.CreateModel(
name='OperationalActionType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name='PeriodTypes',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=30)),
],
),
migrations.CreateModel(
name='PlanningPeriods',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('year', models.IntegerField()),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ugssim.company')),
('periodType', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='ugssim.periodtypes')),
],
),
migrations.RemoveField(
model_name='companydata',
name='user',
),
migrations.AddField(
model_name='salesarea',
name='number',
field=models.IntegerField(default=1),
preserve_default=False,
),
migrations.AddField(
model_name='salesarea',
name='used',
field=models.BooleanField(default=True, verbose_name='Zur Gründungssimulation verwendet'),
),
migrations.CreateModel(
name='CompanyOptions',
fields=[
('company', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='options', serialize=False, to='ugssim.company')),
('planingYears', models.IntegerField(default=3, verbose_name='Planungsjahre')),
('startPhaseDuration', models.IntegerField(default=0, verbose_name='Dauer der Anlaufphase in Monaten')),
('currency', models.ForeignKey(default=1, on_delete=django.db.models.deletion.RESTRICT, related_name='currencys', to='ugssim.currency', verbose_name='Währung')),
('earningsPeriod', models.ForeignKey(default=1, on_delete=django.db.models.deletion.RESTRICT, related_name='earningsPeriods', to='ugssim.earningsperiod', verbose_name='Ergebnisperiode')),
('numberPresentation', models.ForeignKey(default=1, on_delete=django.db.models.deletion.RESTRICT, related_name='presentations', to='ugssim.numberpresentation', verbose_name='Zahlenpräsentation')),
],
),
migrations.CreateModel(
name='SalesVolume',
fields=[
('company', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='SalesVolumes', serialize=False, to='ugssim.company')),
('month', models.IntegerField()),
('value', models.DecimalField(decimal_places=2, max_digits=10)),
('volume', models.DecimalField(decimal_places=2, max_digits=10)),
],
),
migrations.DeleteModel(
name='CommonData',
),
migrations.DeleteModel(
name='CompanyData',
),
migrations.AddField(
model_name='operationalaction',
name='type',
field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='ugssim.operationalactiontype'),
),
migrations.AddField(
model_name='salesarea',
name='company',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='salesAreas', to='ugssim.company'),
preserve_default=False,
),
]

@ -3,13 +3,14 @@ from datetime import date
from django import forms from django import forms
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from month.models import MonthField
from UGSdjangoProject import settings from UGSdjangoProject import settings
# Create your models here.
class Address(models.Model): class Address(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="new_spending", null=True) # user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="new_spending", null=True)
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
first_name = models.CharField("Vorname", max_length=255, null=True) first_name = models.CharField("Vorname", max_length=255, null=True)
surname = models.CharField("Nachname", max_length=255, null=True) surname = models.CharField("Nachname", max_length=255, null=True)
birthday: date = models.DateField("Geburtstag", null=True) birthday: date = models.DateField("Geburtstag", null=True)
@ -23,34 +24,103 @@ class Address(models.Model):
class Summary(models.Model): class Summary(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_summary") user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
text = models.TextField(max_length=2000) text = models.TextField(max_length=2000)
def __str__(self): def __str__(self):
return self.text return self.text
class Currency(models.Model):
title = models.CharField(max_length=3)
class NumberPresentation(models.Model):
title = models.CharField(max_length=20)
class EarningsPeriod(models.Model):
title = models.CharField(max_length=20)
class Company(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
title = models.CharField("Beschreibung", max_length=255, null=True)
website = models.URLField("Webseite", max_length=200, null=True)
startMonth = MonthField("Starttermin")
numberOfSalesAreas = models.IntegerField("Anzahl der Umsatzbereiche", null=True)
class SalesAreaType(models.Model): class SalesAreaType(models.Model):
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
class SalesArea(models.Model): class SalesArea(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE,related_name='salesAreas')
number = models.IntegerField()
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
type = models.ForeignKey(SalesAreaType, on_delete=models.RESTRICT) type = models.ForeignKey(SalesAreaType, on_delete=models.RESTRICT)
used = models.BooleanField("Zur Gründungssimulation verwendet", default=True)
class CompanyData(models.Model): class PeriodTypes(models.Model):
title = models.CharField(max_length=30)
class PlanningPeriods(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
year = models.IntegerField()
periodType = models.ForeignKey(PeriodTypes, on_delete=models.RESTRICT)
class CompanyOptions(models.Model):
company = models.OneToOneField(Company, on_delete=models.CASCADE, primary_key=True, related_name='options')
currency = models.ForeignKey(Currency, on_delete=models.RESTRICT, default=1, related_name='currencys',
verbose_name="Währung")
numberPresentation = models.ForeignKey(NumberPresentation,
on_delete=models.RESTRICT,
default=1,
related_name='presentations',
verbose_name="Zahlenpräsentation")
earningsPeriod = models.ForeignKey(EarningsPeriod,
on_delete=models.RESTRICT,
default=1,
related_name='earningsPeriods',
verbose_name="Ergebnisperiode")
planingYears = models.IntegerField("Planungsjahre",default=3)
startPhaseDuration = models.IntegerField("Dauer der Anlaufphase in Monaten", default=0)
class SalesMarket(models.Model):
company = models.OneToOneField(Company, on_delete=models.CASCADE, primary_key=True, related_name='SalesMarket')
priceProhibitiv = models.IntegerField()
volumeProhibitiv = models.IntegerField()
priceQuantityDropped = models.IntegerField()
volumeQuantityDropped = models.IntegerField()
priceQuantityRaised = models.IntegerField()
volumeQuantityRaised = models.IntegerField()
priceDubious = models.IntegerField()
volumeDubious = models.IntegerField()
class SalesVolume(models.Model):
company = models.OneToOneField(Company, on_delete=models.CASCADE, primary_key=True, related_name='SalesVolumes')
month = models.IntegerField()
value = models.DecimalField(max_digits=10, decimal_places=2)
volume = models.DecimalField(max_digits=10, decimal_places=2)
class OperationalActionType(models.Model):
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
website = models.URLField(max_length=200)
startDate = models.DateField()
#salesArea = models.ManyToManyField(SalesArea, related_name='+')
class AllgemeinesData(models.Model): class OperationalAction(models.Model):
currency = models.CharField(max_length=3) company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='OperationalActions')
years = models.IntegerField() type = models.ForeignKey(OperationalActionType, on_delete=models.RESTRICT)
startPhase = models.IntegerField() salesdependent = models.BooleanField(default=False)
planingPeriods = models.IntegerField() month = models.IntegerField()
ammount = models.DecimalField(max_digits=10, decimal_places=2)
''' '''

@ -6,6 +6,7 @@
{% for key,value in formlist.items %} {% for key,value in formlist.items %}
{% define value|lookup:'form' as myform %} {% define value|lookup:'form' as myform %}
{% define value|lookup:'modelname' as modelname %} {% define value|lookup:'modelname' as modelname %}
{% define value|lookup:'heading' as heading %}
{% define value|lookup:'description' as description %} {% define value|lookup:'description' as description %}
<form name="form{{ modelname }}" method="post" class="form-group" action="/planungsparameter/"> <form name="form{{ modelname }}" method="post" class="form-group" action="/planungsparameter/">
{% csrf_token %} {% csrf_token %}
@ -14,10 +15,14 @@
<button class="accordion-button" type="button" data-bs-toggle="collapse" <button class="accordion-button" type="button" data-bs-toggle="collapse"
data-bs-target="#collapse{{ modelname }}" data-bs-target="#collapse{{ modelname }}"
aria-expanded="true" aria-controls="collapse{{ modelname }}"> aria-expanded="true" aria-controls="collapse{{ modelname }}">
{{ value|lookup:'heading' }} {{ heading }}
</button> </button>
</h2> </h2>
<div id="collapse{{ modelname }}" class="accordion-collapse collapse show" <div id="collapse{{ modelname }}" class="accordion-collapse collapse
{% if forloop.first %}
show
{% endif %}
"
data-bs-parent="#accordionPlanning"> data-bs-parent="#accordionPlanning">
<div class="accordion-body"> <div class="accordion-body">
<p>{{ description }} </p> <p>{{ description }} </p>
@ -34,11 +39,8 @@
{% if field.html_name == "user" %} {% if field.html_name == "user" %}
<input type="hidden" name='user' value="{{user.id}}"> <input type="hidden" name='user' value="{{user.id}}">
{% else %} {% else %}
{% if field.html_name == "description" %} <label for="{{ field.id_for_label }}">{{ field.label }}</label>
{% else %} {{field }}
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{field }}
{% endif %}
{% endif %} {% endif %}
</div> </div>
{% endfor %} {% endfor %}
@ -46,7 +48,9 @@
</div> </div>
</div> </div>
</div>
</form> </form>
{% endfor %}
{% endfor %}
</div>
{% endblock content %} {% endblock content %}

@ -13,6 +13,16 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/planungsparameter/">Planungsparameter</a> <a class="nav-link" href="/planungsparameter/">Planungsparameter</a>
</li> </li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"
aria-expanded="false">
Märkte
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/salesmarket/">Absatzmärkte</a></li>
<li><a class="dropdown-item" href="/revenue/">Umsatz</a></li>
</ul>
</li>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"
aria-expanded="false"> aria-expanded="false">

@ -37,11 +37,12 @@ def planungsparameter(request):
""" """
formlist = {} formlist = {}
modellist = ['Address', 'Summary'] #, 'CompanyData'] modellist = ['Address', 'Summary', 'Company']
for modelname in modellist: for modelname in modellist:
modelclass = get_class(modelname) modelclass = get_class(modelname)
formclass = get_class(modelname + 'Form') formclass = get_class(modelname + 'Form')
if request.method == "POST": if request.method == "POST":
"""
if modelname + 'Button' in request.POST: if modelname + 'Button' in request.POST:
form = formclass(request.POST) form = formclass(request.POST)
# form.fields.pop('description') # form.fields.pop('description')
@ -50,17 +51,19 @@ def planungsparameter(request):
form = formclass(request.POST) form = formclass(request.POST)
else: else:
form = formclass() form = formclass()
"""
form = formclass()
else: else:
try: try:
adressdict = modelclass.objects.filter(user=request.user).values().first() dict = modelclass.objects.filter(user=request.user).values().first()
form = formclass(initial=adressdict) form = formclass(initial=dict)
except Exception as e: except Exception as e:
form = formclass() form = formclass()
formpart = { formpart = {
'modelname': modelname, 'modelname': modelname,
'form': form, 'form': form,
'heading': 'Mandatendaten', 'heading': form.heading,
'description': 'Dict Description' 'description': form.description
} }
formlist.update({modelname + "form": formpart}) formlist.update({modelname + "form": formpart})
@ -75,12 +78,15 @@ def save_planungsparameter(request):
""" """
Save the form data for planungsparameter. Save the form data for planungsparameter.
:param pk:
:param request: The HTTP request object. :param request: The HTTP request object.
:return: HttpResponse object. :return: HttpResponse object.
""" """
if request.method == "POST": if request.method == "POST":
if request.headers.get('X-Requested-With') == 'XMLHttpRequest': if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
# Load Body # Load Body
body = json.loads(request.body.decode('utf-8')) body = json.loads(request.body.decode('utf-8'))
# Form Data # Form Data
@ -90,7 +96,8 @@ def save_planungsparameter(request):
# Get Classes # Get Classes
formclass = get_class(modelName+'Form') formclass = get_class(modelName+'Form')
modelclass = get_class(modelName) modelclass = get_class(modelName)
form = formclass(data) form_instance=User.objects.get(id=request.user.id)
form = formclass(data,instance=form_instance)
# Check User ID # Check User ID
user_id = request.user.id user_id = request.user.id
try: try:
@ -100,11 +107,18 @@ def save_planungsparameter(request):
if form_user_id != user_id: if form_user_id != user_id:
return redirect('logout') return redirect('logout')
else: else:
# Update Database if modelclass.objects.filter(pk=form_user_id).exists():
if form.is_valid(): # Update Database
form.save() # form.initial['user'] = 1
modelclass.objects.udpate_or_create(**form.cleaned_data) if form.is_valid():
return HttpResponse("Form data saved successfully.") for key,value in form.cleaned_data.items():
# print(key, value)
modelclass.objects.filter(pk=form_user_id).update(**{key:value})
return HttpResponse("Form data updates successfully.")
else:
if form.is_valid():
modelclass.objects.create(**form.cleaned_data)
return HttpResponse("Form data saved successfully.")
return HttpResponse("Form data NOT saved.") return HttpResponse("Form data NOT saved.")

Loading…
Cancel
Save