diff --git a/digitaleagentur/__pycache__/urls.cpython-38.pyc b/digitaleagentur/__pycache__/urls.cpython-38.pyc index 738ecd8..4758bd4 100644 Binary files a/digitaleagentur/__pycache__/urls.cpython-38.pyc and b/digitaleagentur/__pycache__/urls.cpython-38.pyc differ diff --git a/digitaleagentur/urls.py b/digitaleagentur/urls.py index 5dc30ae..2b302c4 100644 --- a/digitaleagentur/urls.py +++ b/digitaleagentur/urls.py @@ -3,7 +3,7 @@ from django.urls import path, include from django.contrib.auth import views as auth_views from django.conf import settings from django.conf.urls.static import static -from users.views import AgencyCreateView, registerNewAgency, landingPage +from users.views import AgencyCreateView, registerNewAgency, landingPage, registerNewAgencyRD, onlyRD from . import views from .views import GetCryptFile, GetCryptFileRecover from django.contrib.auth.decorators import login_required @@ -33,6 +33,8 @@ urlpatterns = [ path('password-reset-confirm///', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'), name='password_reset_confirm'), path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'), name='password_reset_complete'), path('register/', registerNewAgency, name='register'), + path('registerdard/', registerNewAgencyRD, name='register-rd'), + path('registerrd/', onlyRD, name='register-ord'), path('vve/', landingPage.as_view(), name="landingpage"), path('register/done', views.registerdone, name='register-done'), path('summernote/', include('django_summernote.urls')), diff --git a/recoverdir/forms.py b/recoverdir/forms.py index 46799f2..ad7510c 100644 --- a/recoverdir/forms.py +++ b/recoverdir/forms.py @@ -5,7 +5,7 @@ from bootstrap_datepicker_plus import DatePickerInput from django.contrib.auth.password_validation import validate_password from django.core import validators from passwords.validators import * - +from captcha.fields import CaptchaField class PersLetterForm(forms.ModelForm): @@ -28,10 +28,14 @@ class LoginRDForm(forms.Form): class LoginRDExternalForm(forms.Form): + + captcha = CaptchaField() + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['key'] = forms.CharField(label="Sicherheitssschlüssel", required=True) self.fields['pass'] = forms.CharField(widget=forms.PasswordInput, label="Passwort", required=True) + self.fields['captcha'] = CaptchaField(required=True, label="Bitte geben Sie die Symbole ein.") class RecoverDirSettingForm(forms.ModelForm): diff --git a/recoverdir/views.py b/recoverdir/views.py index 7d0b206..97dc86f 100644 --- a/recoverdir/views.py +++ b/recoverdir/views.py @@ -82,13 +82,14 @@ class LoadExternalDataLogin(FormView): # LOGIN IN DIE NOTFALLHILFE for ele in settings: - if(ele.recoverkey == key and ele.logpass == password): + if(ele.recoverkey == key and ele.logpass == password and form.is_valid()): ele.lastlogg = datetime.now() ele.save() return redirect('load-rd-external-logged', agpk=ele.agency.pk) else: messages.warning(self.request, f'Die eingegebenen Daten sind nicht korrekt!') return redirect('load-rd-external') + return super().form_valid(form) class CloseExternalData(TemplateView): diff --git a/users/admin.py b/users/admin.py index 7551001..2a4e016 100644 --- a/users/admin.py +++ b/users/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Profile, Agency, AgencyGroup, AgencyJob, AgencyNetwork, AgencyNetworkPreperation, UserTime, UserYearAbsenceInfo, UserNotifications, AgencyBills +from .models import Profile, Agency, AgencyGroup, AgencyJob, AgencyNetwork, AgencyNetworkPreperation, UserTime, UserYearAbsenceInfo, UserNotifications, AgencyBills, RegNotfallhilfe from .priomodel import Prio from standards.models import StandardCommentRate, StandardComments from django.contrib.auth.models import Permission @@ -41,4 +41,5 @@ admin.site.register(Documents, SimpleHistoryAdmin) admin.site.register(Handlungsleitfaden) admin.site.register(RDContact) admin.site.register(RecoverDirSetting) -admin.site.register(MainStatistic) \ No newline at end of file +admin.site.register(MainStatistic) +admin.site.register(RegNotfallhilfe) \ No newline at end of file diff --git a/users/models.py b/users/models.py index 573773a..354fc2b 100644 --- a/users/models.py +++ b/users/models.py @@ -496,6 +496,19 @@ class AgencyGroup(models.Model): ('recoverdirmanager', 'Notfallhilfe verwalten') ] +class RegNotfallhilfe(models.Model): + + mail = models.CharField(max_length=500, blank=True) + name = models.CharField(max_length=500, blank=True) + persnumber = models.CharField(max_length=500, blank=True) + mitgliedsnummer = models.CharField(max_length=500, blank=True) + plz = models.CharField(max_length=500, blank=True) + stadt = models.CharField(max_length=500, blank=True) + street = models.CharField(max_length=500, blank=True) + data_to_vh = models.BooleanField(default=True) + rabatt = models.BooleanField(default=False) + + # SUBCLASS class UserFullName(User): class Meta: diff --git a/users/templates/users/landingpage.html b/users/templates/users/landingpage.html index 0c5d72c..6398a77 100644 --- a/users/templates/users/landingpage.html +++ b/users/templates/users/landingpage.html @@ -50,7 +50,7 @@

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

- Registrieren & Bestellen + Registrieren & Bestellen

@@ -60,7 +60,7 @@

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

- Bestellen + Bestellen

diff --git a/users/templates/users/rdorder_complete.html b/users/templates/users/rdorder_complete.html new file mode 100644 index 0000000..fd71f25 --- /dev/null +++ b/users/templates/users/rdorder_complete.html @@ -0,0 +1,24 @@ + +{% extends "users/publicbase.html" %} + +{% load crispy_forms_tags %} + +{% block content %} + + +
+
+ + +

Bestellung abgeschlossen

+
+

Sie erhalten in den nächsten Tagen eine E-Mail mit allen Zahlungsinformationen zu Ihrer Bestellung. +

+
+
+{% endblock content %} \ No newline at end of file diff --git a/users/templates/users/register.html b/users/templates/users/register.html index 99f6954..3411c24 100644 --- a/users/templates/users/register.html +++ b/users/templates/users/register.html @@ -45,7 +45,7 @@ -->
- +
diff --git a/users/templates/users/register_da_rd.html b/users/templates/users/register_da_rd.html new file mode 100644 index 0000000..94450a9 --- /dev/null +++ b/users/templates/users/register_da_rd.html @@ -0,0 +1,58 @@ + +{% extends "users/publicbase.html" %} + +{% load crispy_forms_tags %} + +{% block content %} + +
+
+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} +
+ {% csrf_token %} +
+ + +

Registrieren & Notfallhilfe bestellen

+
+
+
+ {% for field in form %} + {% if forloop.counter|divisibleby:8 and forloop.counter != 9%} +
+
+ {% endif %} + {% if field.name != 'captcha' and field.name != 'agb' and field.name != 'av' %} + {{field|as_crispy_field}} + {% endif %} + {% endfor %} + {{form.agb}}  AGB's*
+ {{form.av}}  Auftragsverarbeitung* + {{form.captcha|as_crispy_field}} +
+
+
+
+
+ +
+
+
+
+{% endblock content %} + + diff --git a/users/templates/users/register_rd.html b/users/templates/users/register_rd.html new file mode 100644 index 0000000..a5d6b1f --- /dev/null +++ b/users/templates/users/register_rd.html @@ -0,0 +1,56 @@ + +{% extends "users/publicbase.html" %} + +{% load crispy_forms_tags %} + +{% block content %} + +
+
+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} +
+ {% csrf_token %} +
+ + +

Notfallhilfe bestellen

+
+
+
+ {% for field in form %} + {% if forloop.counter|divisibleby:6 %} +
+
+ {% endif %} + {% if field.name != 'captcha' and field.name != 'agb' and field.name != 'av' %} + {{field|as_crispy_field}} + {% endif %} + {% endfor %} + {{form.captcha|as_crispy_field}} +
+
+
+
+
+ +
+
+
+
+{% endblock content %} + + diff --git a/users/usersforms.py b/users/usersforms.py index 8480d6c..80bd9eb 100644 --- a/users/usersforms.py +++ b/users/usersforms.py @@ -2,7 +2,7 @@ from django import forms from django.db import models from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm -from .models import Profile, Agency +from .models import Profile, Agency, RegNotfallhilfe from django.contrib.auth.models import Permission from areas.models import Areas from tasks.models import Tasks @@ -21,7 +21,7 @@ class UsersAddNewUser(UserCreationForm): error_messages = { 'email': { - 'unique': _("DIE JIBBET SCHON!"), + 'unique': _("Mailadresse bereits vergeben!"), }, } @@ -193,5 +193,49 @@ class NewAgencyForm(forms.Form): self.fields['av'] = forms.BooleanField(required=True, label="Auftragsverarbeitung") self.fields['captcha'] = CaptchaField(required=True, label="Bitte geben Sie die Symbole ein.") +# Formular für Registrierung neuer Agentur UND Notfallhilfe +class NewAgencyFormRD(forms.Form): + + captcha = CaptchaField() + + fields = ['first_name','last_name','mail','persnumber', 'plz', 'stadt', 'street', 'data_to_vh', 'agencyname','vve','agb','av','captcha'] + field_order = ['agencyname', 'first_name','last_name','mail','persnumber', 'plz', 'stadt', 'street', 'data_to_vh', 'vve','agb','av','captcha'] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['first_name'] = forms.CharField(required=True, label="Vorname") + self.fields['last_name'] = forms.CharField(required=True, label="Nachname") + self.fields['mail'] = forms.EmailField(required=True, label="E-Mail") + self.fields['persnumber'] = forms.CharField(required=True, label="Personalnummer") + self.fields['agencyname'] = forms.CharField(required=True, label="Agenturname") + self.fields['plz'] = forms.CharField(required=True, label="PLZ") + self.fields['stadt'] = forms.CharField(required=True, label="Stadt") + self.fields['street'] = forms.CharField(required=True, label="Straße und Hausnummer") + self.fields['vve'] = forms.CharField(required=True, label="VVE-Mitgliedsnummer") + self.fields['agb'] = forms.BooleanField(required=True, label="AGB's") + self.fields['av'] = forms.BooleanField(required=True, label="Auftragsverarbeitung") + self.fields['data_to_vh'] = forms.BooleanField(required=True, label="Hiermit erkläre ich mich der Übertragung meiner Daten von der vh Solutions UG an den VVE einverstanden.") + self.fields['captcha'] = CaptchaField(required=True, label="Bitte geben Sie die Symbole ein.") + - \ No newline at end of file +class FormRD(forms.Form): + + captcha = CaptchaField() + model = RegNotfallhilfe + + fields = ['name', 'mail', 'persnumber', 'mitgliedsnummer', 'plz', 'stadt', 'street', 'data_to_vh'] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.fields['name'] = forms.CharField(required=True, label="Vor- und Nachname") + self.fields['persnumber'] = forms.CharField(required=True, label="Personalnummer") + self.fields['mitgliedsnummer'] = forms.CharField(required=True, label="VVE-Mitgliedsnummer") + self.fields['plz'] = forms.CharField(required=True, label="PLZ") + self.fields['stadt'] = forms.CharField(required=True, label="Stadt") + self.fields['street'] = forms.CharField(required=True, label="Straße und Hausnummer") + self.fields['mail'] = forms.EmailField(required=True, label="E-Mail") + self.fields['data_to_vh'] = forms.BooleanField(required=True, label="Hiermit erkläre ich mich der Übertragung meiner Daten von der vh Solutions UG an den VVE einverstanden.") + self.fields['captcha'] = CaptchaField(required=True, label="Bitte geben Sie die Symbole ein.") + + diff --git a/users/views.py b/users/views.py index 0144c55..dc092da 100644 --- a/users/views.py +++ b/users/views.py @@ -2,12 +2,12 @@ from django.shortcuts import render, redirect, reverse from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth.decorators import login_required from django.conf import settings -from .usersforms import UsersAddNewUser, UsersAddProfileForm, UsersChangeProfil, AgencyUpdateForm, UsersPermForm, UserAreaTaskForm, SupportForm, NewAgencyForm +from .usersforms import UsersAddNewUser, UsersAddProfileForm, UsersChangeProfil, AgencyUpdateForm, UsersPermForm, UserAreaTaskForm, SupportForm, NewAgencyForm, NewAgencyFormRD, FormRD from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View, TemplateView from django.contrib import messages from django.contrib.auth.models import User, Permission from django.db import models -from .models import Profile, Agency, UserTime, UserYearAbsenceInfo, AgencyBills +from .models import Profile, Agency, UserTime, UserYearAbsenceInfo, AgencyBills, RegNotfallhilfe from django.core.mail import send_mail from django.http import HttpResponseRedirect,HttpResponse, JsonResponse from areas.models import Areas @@ -188,12 +188,123 @@ def toUpdate(request): ut.loose_holidedate = "30.04" ut.save() +def onlyRD(request): + if request.method == "POST": + rdform = FormRD(request.POST) + + if rdform.is_valid(): + rd = RegNotfallhilfe() + rd.mail = rdform.cleaned_data.get('mail') + rd.name = rdform.cleaned_data.get('name') + rd.persnumber = rdform.cleaned_data.get("persnumber") + rd.mitgliedsnummer = rdform.cleaned_data.get("mitgliedsnummer") + rd.plz = rdform.cleaned_data.get("plz") + rd.stadt = rdform.cleaned_data.get("stadt") + rd.street = rdform.cleaned_data.get("street") + rd.data_to_vh = True + rd.rabatt = False + rd.save() + return render (request, 'users/rdorder_complete.html') + else: + messages.success(request, f'Bitte geben Sie korrekte Daten ein!') + context = { + "form" : FormRD(request.POST) + } + return render (request, 'users/register_rd.html',context) + else: + context = { + "form" : FormRD() + } + return render (request, 'users/register_rd.html',context) + + + ''' -DASHBOARD-View -View nach erfolgreichem Login Dashboard +Neue Agentur UND Notfallhilfe bestellen -Templates: welcomeusers.html und base.html +''' +def registerNewAgencyRD(request): + if request.method == "POST": + newagencyform = NewAgencyFormRD(request.POST) + + + if newagencyform.is_valid(): + # Check Mail + email = newagencyform.cleaned_data.get('mail') + + mailset = User.objects.filter(email=email) + if(len(mailset) == 0): + # AGENTURREGISTRIERUNG + newuser_name = newagencyform.cleaned_data.get('first_name') + ' ' + newagencyform.cleaned_data.get('last_name') + + agency = Agency() + agency.name = newagencyform.cleaned_data.get("agencyname") + agency.vve = newagencyform.cleaned_data.get("vve") + agency.street = newagencyform.cleaned_data.get("street") + agency.city = newagencyform.cleaned_data.get("stadt") + agency.plz = newagencyform.cleaned_data.get("plz") + agency.save() + pr=Profile() + pr.agency=agency + user = "" + try: + user=User.objects.create_user(email, email, randomString(30)) + except: + user = User.objects.get(username=email) + user.first_name = newagencyform.cleaned_data.get('first_name') + user.last_name = newagencyform.cleaned_data.get('last_name') + pr.user=user + pr.save() + user.profile = pr + user.save() + + msg_html = render_to_string('users/register_mail.html', {'username': newuser_name}) + + + # NOTFALLHILFE-DATEN SPEICHERN + rd = RegNotfallhilfe() + rd.mail = email + rd.name = newagencyform.cleaned_data.get('first_name') + ' ' + newagencyform.cleaned_data.get('last_name') + rd.persnumber = newagencyform.cleaned_data.get("persnumber") + rd.mitgliedsnummer = newagencyform.cleaned_data.get("vve") + rd.plz = newagencyform.cleaned_data.get("plz") + rd.stadt = newagencyform.cleaned_data.get("stadt") + rd.street = newagencyform.cleaned_data.get("street") + rd.data_to_vh = True + rd.rabatt = True + rd.save() + + # E-Mail für Passwort-Setzung! + form = PasswordResetForm({'email': email}) + if form.is_valid(): + form.save(request=request,html_email_template_name='users/password_reset_mail.html') + return render (request, 'users/registercomplete.html') + + else: + messages.success(request, f'Diese E-Mailadresse ist bereits vergeben!') + context = { + "form" : NewAgencyFormRD(request.POST) + } + return render (request, 'users/register_da_rd.html',context) + else: + messages.success(request, f'Bitte die korrekten Symbole aus dem Bild eingeben!') + + context = { + "form" : NewAgencyForm(request.POST) + } + return render (request, 'users/register_da_rd.html',context) + + else: + context = { + "form" : NewAgencyFormRD() + } + return render (request, 'users/register_da_rd.html',context) + + + +''' +Neue Agentur registrieren ''' def registerNewAgency(request):