diff --git a/users/models.py b/users/models.py index 080b812..a3e8310 100644 --- a/users/models.py +++ b/users/models.py @@ -7,6 +7,9 @@ from simple_history.models import HistoricalRecords from preferences.models import PaymentMethod, Cotisation from gestion.models import ConsumptionHistory + +User._meta.get_field('email')._unique = True + class School(models.Model): """ Stores school. diff --git a/users/templates/users/welcome_email.html b/users/templates/users/welcome_email.html new file mode 100644 index 0000000..8c7c420 --- /dev/null +++ b/users/templates/users/welcome_email.html @@ -0,0 +1,15 @@ +{% autoescape off %} +Bonjour {{user.username}},
+ +Vous venez de créer votre compte sur le logiciel de gestion de l'association Coopé Technopôle Metz. Pour finir vous adhésion à l'association, vous devez + + +Vous pouvez acceder à votre compte sur {{protocol}}://{{domain}} après avoir activé votre mot de passe avec le lien suivant :
+ +{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

+ +Le Staff Coopé Technopôle Metz +{% endautoescape %} \ No newline at end of file diff --git a/users/templates/users/welcome_email.txt b/users/templates/users/welcome_email.txt new file mode 100644 index 0000000..c2ffdb1 --- /dev/null +++ b/users/templates/users/welcome_email.txt @@ -0,0 +1,11 @@ +Bonjour {{user.username}}, + +Vous venez de créer votre compte sur le logiciel de gestion de l'association Coopé Technopôle Metz. Pour finir vous adhésion à l'association, vous devez +- lire et accepter les statuts et le règlement intérieur (disponibles en pièces jointes), +- vous acquittez d'une cotisation auprès de l'un de nos membres actifs. + +Vous pouvez acceder à votre compte sur {{procotol}}://{{domain}} après avoir activé votre mot de passe avec le lien suivant : + +{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} + +Le Staff Coopé Technopôle Metz \ No newline at end of file diff --git a/users/views.py b/users/views.py index d5f9c6c..a2a8c20 100644 --- a/users/views.py +++ b/users/views.py @@ -2,14 +2,21 @@ from django.shortcuts import render, get_object_or_404, redirect from django.urls import reverse from django.contrib.auth.models import User, Group, Permission from django.contrib.auth import authenticate, login, logout +from django.contrib.auth.tokens import default_token_generator +from django.utils.http import urlsafe_base64_encode from django.contrib import messages from django.db.models import Q from django.http import HttpResponse, HttpResponseRedirect from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator +from django.core.mail import EmailMultiAlternatives +from django.template.loader import get_template +from django.template import Context from django.contrib.auth.decorators import login_required, permission_required from django.forms.models import model_to_dict from django.utils import timezone from django.conf import settings +from django.contrib.sites.shortcuts import get_current_site +from django.utils.encoding import force_bytes import simplejson as json from datetime import datetime, timedelta @@ -23,6 +30,7 @@ from coopeV3.acl import admin_required, superuser_required, self_or_has_perm, ac from .models import CotisationHistory, WhiteListHistory, School from .forms import CreateUserForm, LoginForm, CreateGroupForm, EditGroupForm, SelectUserForm, GroupsEditForm, EditPasswordForm, addCotisationHistoryForm, addCotisationHistoryForm, addWhiteListHistoryForm, SelectNonAdminUserForm, SelectNonSuperUserForm, SchoolForm, ExportForm from gestion.models import Reload, Consumption, ConsumptionHistory, MenuHistory +from preferences.models import GeneralPreferences @active_required def loginView(request): @@ -169,6 +177,30 @@ def createUser(request): user.save() user.profile.school = form.cleaned_data['school'] user.save() + uid = urlsafe_base64_encode(force_bytes(user.pk)).decode('UTF-8') + print(uid) + token = default_token_generator.make_token(user) + plaintext = get_template('users/welcome_email.txt') + htmly = get_template('users/welcome_email.html') + context = {'user': user, 'uid': uid, 'token': token, 'protocol': "http", 'domain': get_current_site(request).name} + text_content = plaintext.render(context) + html_content = htmly.render(context) + email = EmailMultiAlternatives( + "Bienvenue à l'association Coopé Technopôle Metz", + text_content, + "Coopé Technopôle Metz ", + [user.email], + reply_to=["coopemetz@gmail.com"] + ) + email.attach_alternative(html_content, "text/html") + gp,_ = GeneralPreferences.objects.get_or_create(pk=1) + if gp.statutes: + #email.attach("statuts.pdf", gp.statutes.read(), "application/pdf") + pass + if gp.rules: + #email.attach("ri.pdf", gp.rules.read(), "application/pdf") + pass + email.send() messages.success(request, "L'utilisateur a bien été créé") return redirect(reverse('users:profile', kwargs={'pk':user.pk})) return render(request, "form.html", {"form_entete": "Gestion des utilisateurs", "form":form, "form_title":"Création d'un nouvel utilisateur", "form_button":"Créer mon compte", "form_button_icon": "user-plus", 'extra_html': 'En cliquant sur le bouton "Créer mon compte", vous :'})