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
+
+- 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 {{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 :- attestez sur l\'honneur que les informations fournies à l\'association Coopé Technopôle Metz sont correctes et que vous n\'avez jamais été enregistré dans l\'association sous un autre nom / pseudonyme
- joignez l\'association de votre plein gré
- vous engagez à respecter les statuts et le réglement intérieur de l\'association (envoyés par mail)
- reconnaissez le but de l\'assocation Coopé Technopôle Metz et vous attestez avoir pris conaissances des droits et des devoirs des membres de l\'association
- consentez à ce que les données fournies à l\'association, ainsi que vos autres données de compte (débit, crédit, solde et historique des transactions) soient stockées dans le logiciel de gestion et accessibles par tous les membres actifs de l\'association, en particulier par le comité de direction
'})