diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..c945451 Binary files /dev/null and b/.DS_Store differ diff --git a/areas/__pycache__/__init__.cpython-38.pyc b/areas/__pycache__/__init__.cpython-38.pyc index 68d63ec..b704cf4 100644 Binary files a/areas/__pycache__/__init__.cpython-38.pyc and b/areas/__pycache__/__init__.cpython-38.pyc differ diff --git a/cloud/migrations/__pycache__/__init__.cpython-38.pyc b/cloud/migrations/__pycache__/__init__.cpython-38.pyc index 751a18e..1188a24 100644 Binary files a/cloud/migrations/__pycache__/__init__.cpython-38.pyc and b/cloud/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/dasettings/__pycache__/__init__.cpython-38.pyc b/dasettings/__pycache__/__init__.cpython-38.pyc index 551679f..3e52170 100644 Binary files a/dasettings/__pycache__/__init__.cpython-38.pyc and b/dasettings/__pycache__/__init__.cpython-38.pyc differ diff --git a/dasettings/forms.py b/dasettings/forms.py index cac4780..b85775c 100644 --- a/dasettings/forms.py +++ b/dasettings/forms.py @@ -34,6 +34,53 @@ class UsersSelfChangeForm(forms.ModelForm): model = User fields = ['email'] +class AgencyBillMail(forms.ModelForm): + class Meta: + model = Agency + fields = ['payment_address'] + + labels = { + 'payment_address' : 'E-Mail für Rechnungen' + } + +class AgencyBillPlan(forms.ModelForm): + + class Meta: + model = Agency + + labels = { + "name" : "Agenturname", + "inhaber" : "Inhaber", + "street" : "Straße und Hausnummer", + "plz" : "PLZ", + "city" : "Stadt", + "agency_email" : "E-Mail", + "phone" : "Telefon", + "agb" : "AGB akzeptieren", + "contract" : "Auftragsdatenverarbeitung akzeptieren" + + } + fields = ['name','inhaber','agency_email', 'phone', 'street', 'plz', 'city', 'paymentplan', 'agb', 'contract'] + + def __init__(self, *args, **kwargs): + super(AgencyBillPlan, self).__init__(*args, **kwargs) + self.fields['paymentplan'] = forms.CharField(initial=6, required=True, widget=forms.HiddenInput()) + self.fields['name'] = forms.CharField(required=True) + + self.fields['inhaber'] = forms.CharField(required=True) + + self.fields['agency_email'] = forms.CharField(required=True) + self.fields['phone'] = forms.CharField(required=True) + self.fields['street'] = forms.CharField(required=True) + self.fields['plz'] = forms.CharField(required=True) + self.fields['city'] = forms.CharField(required=True) + + self.fields['agb'] = forms.BooleanField(required=True, label="AGB's akzeptieren") + self.fields['contract'] = forms.BooleanField(required=True, label="Auftragsdatenverarbeitung akzeptieren") + + + + # Form für die Benachrichtigungseinstellungen ''' class UsersNotificationForm(forms.ModelForm): diff --git a/dasettings/migrations/__pycache__/__init__.cpython-38.pyc b/dasettings/migrations/__pycache__/__init__.cpython-38.pyc index 992ddbf..59c1984 100644 Binary files a/dasettings/migrations/__pycache__/__init__.cpython-38.pyc and b/dasettings/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/dasettings/templates/dasettings/calc_content.html b/dasettings/templates/dasettings/calc_content.html index a375eaa..37bb399 100644 --- a/dasettings/templates/dasettings/calc_content.html +++ b/dasettings/templates/dasettings/calc_content.html @@ -1,3 +1,81 @@ {% load mathfilters %} {% load humanize %} -

Vielen Dank für die Unterstützung während der Pilotphase! Für diesen Zeitraum ist die Nutzung kostenfrei.

\ No newline at end of file +{% load counter_tag %} +{% if request.user.profile.agency.paymentstatus == 1 %} +

Ihre Agentur darf die Plattform kostenlos nutzen. Vielen Dank für Ihre Unterstützung!

+{% else %} + +
+
+
+
+
Ihr Betrag
+

Ihr monatlicher Nutzungsbeitrag setzt sich wie folgt zusammen:

+ + + + + + {% loadUserCount request.user as usercount %} + + + + {% loadMWST user as mwst %} + + + + + + + {% loadFinalMoney user as fm %} + + +
Grundbetrag (inkl. 3 Nutzer)21,00 €
Zusätzliche Nutzer (3,00 € pro Nutzer){{usercount}}
Gesetzliche MwSt. (19%){{mwst|floatformat:2|intcomma}} €
 
Monatlicher Bruttobetrag{{fm|floatformat:2|intcomma}} €
+
+
Ihre Zahlungsweise
+ + {% getNextMonth request.user.profile.agency as nextMonth %} + + + Ihre Agentur wurde am {{ request.user.profile.agency.registerdate|date:"d.m.Y" }} registriert. + {% if paymentplan == None %} + Es wurde noch keine Zahlungsweise ausgewählt. Sie können die Digitale Agentur bis zum {{nextMonth|date:"d.m.Y"}} kostenlos nutzen. Möchten Sie die Digitale Agentur auch nach diesem Zeitraum nutzen, wählen Sie bitte einen Zahlplan aus. +
+ Zahlplan jetzt auswählen + {% else %} + Zahlungsweise: TODO + {% endif %} +
+
Fragen, Hilfe, Kündigung
+ Bei Fragen zu Ihrer Abrechnung melden Sie sich bitte per E-Mail an abrechnung@digitale-agentur.com. + + KÜNDIGUNGSMODALITÄTEN NOCH EINFÜGEN +
+
+
+
+ +
+
+
E-Mail-Adresse
+ Ihre Rechnungen werden automatisch an folgende E-Mailadresse gesendet.
+ {% if request.user.profile.agency.payment_address == None %} + Es wurde keine Adresse hinterlegt. Die Adresse wird an die Agenturadresse versendet: {{request.user.profile.agency.agency_email}} + {% else %} + {{request.user.profile.agency.payment_address}} + {% endif %} +
+ E-Mailadresse ändern +
+
+ +
+
+
Rechnungen
+ +
+
+
+ +
+{% endif %} \ No newline at end of file diff --git a/dasettings/templates/dasettings/dasettings_billmail.html b/dasettings/templates/dasettings/dasettings_billmail.html new file mode 100644 index 0000000..f9fd7f8 --- /dev/null +++ b/dasettings/templates/dasettings/dasettings_billmail.html @@ -0,0 +1,16 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+

Rechnungs-E-Mail aktualisieren

+
+
+ {% csrf_token %} +
+ {{form|crispy}} +
+   + Abbrechen + +
+{% endblock content %} diff --git a/dasettings/templates/dasettings/dasettings_billplan.html b/dasettings/templates/dasettings/dasettings_billplan.html new file mode 100644 index 0000000..9d22ced --- /dev/null +++ b/dasettings/templates/dasettings/dasettings_billplan.html @@ -0,0 +1,99 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% load mathfilters %} +{% load humanize %} +{% load counter_tag %} +{% block content %} +
+

Zahlplan auswählen

+
+
+ {% csrf_token %} +
+
+
Agenturdaten überprüfen
+
+ {% for formfield in form %} + {% if formfield.name != 'agb' and formfield.name != 'contract' %} + {{formfield|as_crispy_field}} + {% endif %} + {% endfor %} + +
+
+
Zahlplan festlegen
+
+

Wählen Sie aus, für welchen Zeitraum die Abrechnung Ihrer Digitalen Agentur durchgeführt werden soll.

+
+ + +
+
+ + 6 Monate + +
+
+ + +
+
+ {{form.contract|as_crispy_field}} + {{form.agb|as_crispy_field}} +
+

Mit Klick auf dem Button Jetzt kostenpflichtig bestellen wird eine Rechnung für Ihre Agentur generiert und per E-Mail an die hinterlegte Rechnungs-E-Mailadresse oder an die Agentur-E-Mailadresse versendet. Der Rechnungsbetrag muss innerhalb von 14 Tagen beglichen werden. +


+ {% loadFinalMoney user as fm %} + Rechnungsbetrag: {{fm|floatformat:2|intcomma}} € +
+ +
+
+
+ Abbrechen +   +
+
+
+ + +{% endblock content %} + + + + + + + + + + + + + + + + diff --git a/dasettings/urls.py b/dasettings/urls.py index 5b6e0cb..5ea4fbb 100644 --- a/dasettings/urls.py +++ b/dasettings/urls.py @@ -3,7 +3,7 @@ from django.contrib.auth import views as auth_views from django.contrib.auth.decorators import login_required, permission_required from . import views from .views import FreeDayDeleteView, AbsenceReasonDeleteView, AbsenceReasonUpdateView, AbsenceReasonAddView -from .views import NewUserFirstStep, UserProfileUpdate, UserChangeMain +from .views import NewUserFirstStep, UserProfileUpdate, UserChangeMain, BillMailUpdate, BillPlanUpdate ''' Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben! ''' @@ -33,4 +33,6 @@ urlpatterns = [ path('abcatdel/', AbsenceReasonDeleteView.as_view(), name="abcat-delete"), path('abcatupdate/', AbsenceReasonUpdateView.as_view(), name="abcat-update"), path('abcatadd/', AbsenceReasonAddView.as_view(), name="abcat-add"), + path('ag/billmail/update/', permission_required('users.agencyinfo')(BillMailUpdate.as_view()), name='ag-billmailupdate'), + path('ag/billplan/', permission_required('users.agencyinfo')(BillPlanUpdate.as_view()), name='ag-billplanupdate'), ] \ No newline at end of file diff --git a/dasettings/views.py b/dasettings/views.py index d0a0481..cbc9760 100644 --- a/dasettings/views.py +++ b/dasettings/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.http import HttpResponseRedirect,HttpResponse, JsonResponse -from .forms import UsersSelfChangeForm, UsersNotificationFormStandard, AgencyGroupPerms, AgencyModulsForm, UserNewUserForm, UserProfileForm, AgencyNetworkForm, AgencyOrganigrammForm, UserTimeForm, AbsenceReasonForm, UsersNotificationFormNews, UsersNotificationFormFiles, UsersNotificationFormMessages ,UsersNotificationFormOrganizer, UsersNotificationFormChat, UsersNotificationFormAbTime, UsersNotificationFormGroups, UsersNotificationFormAgn, UsersNotificationFormTasks +from .forms import UsersSelfChangeForm, UsersNotificationFormStandard, AgencyGroupPerms, AgencyModulsForm, UserNewUserForm, UserProfileForm, AgencyNetworkForm, AgencyOrganigrammForm, UserTimeForm, AbsenceReasonForm, UsersNotificationFormNews, UsersNotificationFormFiles, UsersNotificationFormMessages ,UsersNotificationFormOrganizer, UsersNotificationFormChat, UsersNotificationFormAbTime, UsersNotificationFormGroups, UsersNotificationFormAgn, UsersNotificationFormTasks, AgencyBillMail, AgencyBillPlan from django.contrib import messages from django.contrib.auth import update_session_auth_hash from django.contrib.auth.forms import PasswordChangeForm @@ -1440,3 +1440,138 @@ def ModSettingsTm(request): else: return JsonResponse({}) ''' + +########## ABRECHNUNG ########## +class BillMailUpdate(UpdateView): + model = Agency + success_url = reverse_lazy('dasettings') + form_class = AgencyBillMail + template_name = "dasettings/dasettings_billmail.html" + + def form_valid(self, form): + messages.success(self.request, f"E-Mailadresse erfolgreich aktualisiert!") + return super().form_valid(form) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({'active_link' : 'dasettings'}) + return context + + + +from dateutil.relativedelta import * +class BillPlanUpdate(UpdateView): + model = Agency + success_url = reverse_lazy('dasettings') + form_class = AgencyBillPlan + template_name = "dasettings/dasettings_billplan.html" + + # LexOffice Verbindung + def form_valid(self, form): + agency = self.request.user.profile.agency + + # HEADERS CURL + headers = { + 'Authorization': 'Bearer 33bfb1b9-2994-4fd4-b447-1f4754a5c7cb', + 'Content-Type': 'application/json', + 'Accept': 'application/json', + } + + month = agency.registerdate + next_month = month + relativedelta(months=1) + + voucher_date = next_month.strftime("%Y-%m-%d") + + # USERCOUNT BERECHNEN + usercount = len(User.objects.filter(profile__agency=agency)) + + if(usercount < 4): + usercount = 0 + else: + usercount = usercount - 3 + + # DataJSON + lexdata = { + "voucherDate": voucher_date + "T00:00:00.000+01:00", + "address" : { + "name" : agency.name, + "countryCode" : "DE" + }, + "totalPrice" : { + "currency" : "EUR", + }, + "lineItems" : [ + { + "type" : "custom", + "name" : "Monatsbeitrag", + "quantity" : form.cleaned_data['paymentplan'], + "unitName" : "Stück", + "unitPrice" : + { + "currency" : "EUR", + "netAmount" : 21.00, + "taxRatePercentage" : 19 + }, + }, + { + "type" : "custom", + "name" : "Weitere Mitarbeiter", + "quantity" : usercount, + "unitName" : "Stück", + "unitPrice" : + { + "currency" : "EUR", + "netAmount" : 3, + "taxRatePercentage" : 19 + }, + } + ], + "taxConditions": { + "taxType": "net" + }, + "shippingConditions": { + "shippingDate": voucher_date + "T00:00:00.000+01:00", + "shippingType": "service" + }, + } + json_data = json.dumps(lexdata) + + r = requests.post("https://api.lexoffice.io/v1/vouchers", data=json_data, headers=headers) + + if(r.status_code != 200): + messages.warning(self.request, f"Fehlercode "+str(r.status_code)+". Es wurde keine Rechnung erstellt. Bitte wenden Sie sich an den Support!") + + print(r.status_code) + + return super().form_valid(form) + + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({'active_link' : 'dasettings'}) + return context + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/digitaleagentur/__pycache__/__init__.cpython-38.pyc b/digitaleagentur/__pycache__/__init__.cpython-38.pyc index 8f5ab13..b12ca31 100644 Binary files a/digitaleagentur/__pycache__/__init__.cpython-38.pyc and b/digitaleagentur/__pycache__/__init__.cpython-38.pyc differ diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index e97313d..5e4318a 100644 Binary files a/digitaleagentur/__pycache__/settings.cpython-38.pyc and b/digitaleagentur/__pycache__/settings.cpython-38.pyc differ diff --git a/digitaleagentur/__pycache__/urls.cpython-38.pyc b/digitaleagentur/__pycache__/urls.cpython-38.pyc index 6646c23..40a2636 100644 Binary files a/digitaleagentur/__pycache__/urls.cpython-38.pyc and b/digitaleagentur/__pycache__/urls.cpython-38.pyc differ diff --git a/digitaleagentur/__pycache__/views.cpython-38.pyc b/digitaleagentur/__pycache__/views.cpython-38.pyc index 40b283e..952c571 100644 Binary files a/digitaleagentur/__pycache__/views.cpython-38.pyc and b/digitaleagentur/__pycache__/views.cpython-38.pyc differ diff --git a/message/__pycache__/__init__.cpython-38.pyc b/message/__pycache__/__init__.cpython-38.pyc index d3687b2..a604fc8 100644 Binary files a/message/__pycache__/__init__.cpython-38.pyc and b/message/__pycache__/__init__.cpython-38.pyc differ diff --git a/message/migrations/__pycache__/__init__.cpython-38.pyc b/message/migrations/__pycache__/__init__.cpython-38.pyc index d987d49..4180302 100644 Binary files a/message/migrations/__pycache__/__init__.cpython-38.pyc and b/message/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/news/__pycache__/__init__.cpython-38.pyc b/news/__pycache__/__init__.cpython-38.pyc index 32a487f..1870893 100644 Binary files a/news/__pycache__/__init__.cpython-38.pyc and b/news/__pycache__/__init__.cpython-38.pyc differ diff --git a/notificsys/migrations/__pycache__/__init__.cpython-38.pyc b/notificsys/migrations/__pycache__/__init__.cpython-38.pyc index 794917d..21e784d 100644 Binary files a/notificsys/migrations/__pycache__/__init__.cpython-38.pyc and b/notificsys/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/orga/__pycache__/__init__.cpython-38.pyc b/orga/__pycache__/__init__.cpython-38.pyc index f88666b..752766b 100644 Binary files a/orga/__pycache__/__init__.cpython-38.pyc and b/orga/__pycache__/__init__.cpython-38.pyc differ diff --git a/orga/__pycache__/admin.cpython-38.pyc b/orga/__pycache__/admin.cpython-38.pyc index e569895..989f60c 100644 Binary files a/orga/__pycache__/admin.cpython-38.pyc and b/orga/__pycache__/admin.cpython-38.pyc differ diff --git a/orga/__pycache__/apps.cpython-38.pyc b/orga/__pycache__/apps.cpython-38.pyc index 0c3f746..49d4525 100644 Binary files a/orga/__pycache__/apps.cpython-38.pyc and b/orga/__pycache__/apps.cpython-38.pyc differ diff --git a/orga/__pycache__/models.cpython-38.pyc b/orga/__pycache__/models.cpython-38.pyc index c8a3917..82cca05 100644 Binary files a/orga/__pycache__/models.cpython-38.pyc and b/orga/__pycache__/models.cpython-38.pyc differ diff --git a/orga/__pycache__/urls.cpython-38.pyc b/orga/__pycache__/urls.cpython-38.pyc index e9b9f8c..48bdfc9 100644 Binary files a/orga/__pycache__/urls.cpython-38.pyc and b/orga/__pycache__/urls.cpython-38.pyc differ diff --git a/orga/__pycache__/views.cpython-38.pyc b/orga/__pycache__/views.cpython-38.pyc index ffcbdad..83549c2 100644 Binary files a/orga/__pycache__/views.cpython-38.pyc and b/orga/__pycache__/views.cpython-38.pyc differ diff --git a/organizer/__pycache__/__init__.cpython-38.pyc b/organizer/__pycache__/__init__.cpython-38.pyc index b17aa84..71a192a 100644 Binary files a/organizer/__pycache__/__init__.cpython-38.pyc and b/organizer/__pycache__/__init__.cpython-38.pyc differ diff --git a/organizer/migrations/__pycache__/__init__.cpython-38.pyc b/organizer/migrations/__pycache__/__init__.cpython-38.pyc index 3803d69..c02712e 100644 Binary files a/organizer/migrations/__pycache__/__init__.cpython-38.pyc and b/organizer/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/organizer/urls.py b/organizer/urls.py index d887488..2195c16 100644 --- a/organizer/urls.py +++ b/organizer/urls.py @@ -19,4 +19,5 @@ urlpatterns = [ path('addpass/', permission_required('users.moduleorganizer')(OrganizerAddPassword.as_view(template_name="organizer/agpass_add.html")), name='add-agpass'), path('lerg/', views.loaddefaultql, name="ql-ajaxloaddef"), path('ajo/', views.ajaxorganizer, name="ajaxorganizer"), + ] diff --git a/standards/__pycache__/__init__.cpython-38.pyc b/standards/__pycache__/__init__.cpython-38.pyc index 3e2f839..898070d 100644 Binary files a/standards/__pycache__/__init__.cpython-38.pyc and b/standards/__pycache__/__init__.cpython-38.pyc differ diff --git a/standards/templatetags/__pycache__/__init__.cpython-38.pyc b/standards/templatetags/__pycache__/__init__.cpython-38.pyc index 25883cd..6c0f6eb 100644 Binary files a/standards/templatetags/__pycache__/__init__.cpython-38.pyc and b/standards/templatetags/__pycache__/__init__.cpython-38.pyc differ diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 2204fa2..d239154 100644 Binary files a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc and b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc differ diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py index 82fc14e..d889e4e 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -685,3 +685,54 @@ def counterWDreset(): def getCounterWD(): global workdaycounter return workdaycounter + + +from dateutil.relativedelta import * +@register.simple_tag +def getNextMonth(agency): + month = agency.registerdate + next_month = month + relativedelta(months=1) + return next_month + +@register.simple_tag +def loadUserCount(user): + usercount = len(User.objects.filter(profile__agency=user.profile.agency)) + + if(usercount < 4): + usercount = 0 + else: + usercount = usercount - 3 + return usercount + +@register.simple_tag +def loadMWST(user): + mwst = 0.0 + + usercount = len(User.objects.filter(profile__agency=user.profile.agency)) + + if(usercount < 4): + usercount = 0 + else: + usercount = usercount - 3 + + mwst = (21.0 + usercount*3)/100 * 19 + + return mwst + +@register.simple_tag +def loadFinalMoney(user): + usercount = len(User.objects.filter(profile__agency=user.profile.agency)) + + if(usercount < 4): + usercount = 0 + else: + usercount = usercount - 3 + + finalMoney = ((21.0 + usercount*3)/100 * 19) + 21.0 + usercount*3 + + return finalMoney + + + + + diff --git a/tasks/__pycache__/__init__.cpython-38.pyc b/tasks/__pycache__/__init__.cpython-38.pyc index 7b9ccb4..69126d4 100644 Binary files a/tasks/__pycache__/__init__.cpython-38.pyc and b/tasks/__pycache__/__init__.cpython-38.pyc differ diff --git a/timemanagement/__pycache__/__init__.cpython-38.pyc b/timemanagement/__pycache__/__init__.cpython-38.pyc index 62070bd..b925a30 100644 Binary files a/timemanagement/__pycache__/__init__.cpython-38.pyc and b/timemanagement/__pycache__/__init__.cpython-38.pyc differ diff --git a/timemanagement/migrations/__pycache__/__init__.cpython-38.pyc b/timemanagement/migrations/__pycache__/__init__.cpython-38.pyc index e6a8acc..00320f0 100644 Binary files a/timemanagement/migrations/__pycache__/__init__.cpython-38.pyc and b/timemanagement/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/users/__pycache__/__init__.cpython-38.pyc b/users/__pycache__/__init__.cpython-38.pyc index 2365642..cf20f4c 100644 Binary files a/users/__pycache__/__init__.cpython-38.pyc and b/users/__pycache__/__init__.cpython-38.pyc differ diff --git a/users/models.py b/users/models.py index 0379f8e..0034b03 100644 --- a/users/models.py +++ b/users/models.py @@ -59,6 +59,7 @@ class AgencyNetwork(models.Model): networkid = models.CharField(default="", max_length=30) standards = models.ManyToManyField("standards.Standards", related_name="sharedstandards", blank=True) + def __str__(self): return f'{self.name}' @@ -84,9 +85,29 @@ class Agency(models.Model): agencypic = models.ImageField(default='ag_default.jpg', upload_to=picturepath_agency, blank=True) # MONEY - balance = models.FloatField(default=0.0, max_length=9, blank=True) - nextdebiting = models.DateTimeField(default=timezone.now, blank=True) - monthlyprice = models.FloatField(default=25.0, max_length=9, blank=True) + #balance = models.FloatField(default=0.0, max_length=9, blank=True) + #nextdebiting = models.DateTimeField(default=timezone.now, blank=True) + #monthlyprice = models.FloatField(default=25.0, max_length=9, blank=True) + + + # Payment-Status + # 0 = Normal, Agentur muss ganz normal bezahlen + # 1 = Agentur ist kostenlos dabei! + paymentstatus = models.IntegerField(default=0, null=True) + + # ID für die Verbindung mit Lexoffice + lexofficeid = models.CharField(default="", max_length=200, blank=True) + + # Bezahlplan 3,6,12 Monate + paymentplan = models.IntegerField(default=None, null=True, blank=True) + + # Registrierdatum der Agentur + registerdate = models.DateField(default=timezone.now, null=True) + payment_address = models.EmailField(default=None, blank=True, null=True) + # + agb = models.BooleanField(default=False) + contract = models.BooleanField(default=False) + # MODULEEINSTELLUNGEN FÜR DIE AGENTUR module_news = models.BooleanField(default=True) @@ -111,6 +132,11 @@ class Agency(models.Model): vve = models.CharField(default="", max_length=200, blank=True) + + + + + def __str__(self): return f'{self.name}'