Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.idea
db.sqlite3
__pycache__

File renamed without changes.
89 changes: 89 additions & 0 deletions Account/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
from django.utils import timezone
from django.contrib import admin
from django.core.mail import send_mail
from .models import Members, Users
from django.utils.translation import ugettext_lazy as _

# ******************************
# class StatisticsAdmin(admin.ModelAdmin):
# list_display = ('total_users', 'male_count', 'female_count') # Ajoutez d'autres statistiques si nécessaire
#
# def total_users(self, obj):
# return Users.objects.count()
#
# def male_count(self, obj):
# return Users.objects.filter(sexe='Male').count()
#
# def female_count(self, obj):
# return Users.objects.filter(sexe='Female').count()
#
#
# admin.site.register(Users, StatisticsAdmin)
# *****************************


class MembersAdmin(admin.ModelAdmin):
list_display = ('mentor', 'mentore', 'status', 'created_at', 'updated_at')
list_filter = ('status',)
actions = ['accept_requests', 'reject_requests']

def accept_requests(self, request, queryset):
queryset.update(status=True)
for membership in queryset:
# Envoyer un e-mail à l'utilisateur mentore
subject = "Demande de mentorat acceptée"
message = "Votre demande de mentorat a été acceptée. Vous pouvez maintenant commencer le mentorat."
from_email = "tdev@gmail.com"
recipient_list = [membership.mentore.email]
send_mail(subject, message, from_email, recipient_list, fail_silently=False)

accept_requests.short_description = "Accepter les demandes de mentorat sélectionnées"

def reject_requests(self, request, queryset):
queryset.delete()

reject_requests.short_description = "Rejeter les demandes de mentorat sélectionnées"


admin.site.register(Members, MembersAdmin)


class GenderFilter(admin.SimpleListFilter):
title = _('Gender')
parameter_name = 'sexe'

def lookups(self, request, model_admin):
return (
('Male', _('Male')),
('Female', _('Female')),
)

def queryset(self, request, queryset):
if self.value() == 'Male':
return queryset.filter(sexe='Male')
if self.value() == 'Female':
return queryset.filter(sexe='Female')


class UsersAdmin(admin.ModelAdmin):
list_display = ('username','first_name', 'last_name','duration_since_creation', 'email',)
list_display_links = ('email',) # Lien direct vers la page de modification
search_fields = ("first_name", "email")
list_filter = (GenderFilter,)
actions = ['edit_selected', 'delete_selected', 'show_user_count']

# Méthode pour calculer la durée depuis la création de l'utilisateur
def duration_since_creation(self, obj):
now = timezone.now()
duration = now - obj.created_at
return duration.days

def show_user_count(self, request, queryset):
total_users = Users.objects.count()
self.message_user(request, f"Nombre total d'utilisateurs : {total_users}")

show_user_count.short_description = "Afficher le nombre total d'utilisateurs"
duration_since_creation.short_description = 'Duration Since Creation'


admin.site.register(Users, UsersAdmin)
6 changes: 6 additions & 0 deletions Account/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class AccountConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'Account'
Empty file added Account/forms.py
Empty file.
39 changes: 39 additions & 0 deletions Account/management/commands/seed-superadmin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from django.db import transaction
from django.core.management.base import BaseCommand
from BaseApi.AppEnum import UserRoleEnum
from Account.models import Users
from Permission.models import Roles
from django.contrib.auth.models import Permission

class Seeder:
@classmethod
def seedSuperAdmin(cls):
superUserRole, created = Roles.objects.get_or_create(name=UserRoleEnum.SUPER_ADMIN.value, defaults={'description': 'The super user'})

super_email = input("Enter super user email:")
super_password = input("Enter super user password:")

with transaction.atomic():
super_user, created = Users.objects.get_or_create(
email=super_email,
defaults={
'first_name': 'Super',
'last_name': 'Admin',
'phone': '00000001',
'role': superUserRole
}
)

if created:
super_user.set_password(super_password)
super_user.save()

print (f"Message: Success, [Email: {super_email}, Password: **********]");

class Command(BaseCommand):
help = 'Seed the database with initial data'

def handle(self, *args, **kwargs):
self.stdout.write('Seeding Super Admin...')
Seeder.seedSuperAdmin()
self.stdout.write(self.style.SUCCESS('Successfully seeded the Super Admin'))
32 changes: 32 additions & 0 deletions Account/management/commands/seed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from django.db import transaction
from django.core.management.base import BaseCommand
from Account.models import Pays
from Resource.models import Type
from BaseApi.AppEnum import *
import pycountry

class Seeder:
@classmethod
def countrySeed(cls):
with transaction.atomic():
pays_data = [{'code': country.alpha_2, 'name': country.name} for country in pycountry.countries]
for data in pays_data:
Pays.objects.get_or_create(code=data['code'], defaults={'name': data['name']})

@classmethod
def seed_types_resources(cls):
with transaction.atomic():
for type in TypeResourcesEnum:
Type.objects.get_or_create(name=type.value)

class Command(BaseCommand):
help = 'Seed the database with initial data'

def handle(self, *args, **kwargs):
self.stdout.write('Seeding de pays...')
Seeder.countrySeed()

self.stdout.write('Seeding types d\'entreprises...')
Seeder.seed_types_resources()

self.stdout.write(self.style.SUCCESS('Successfully seeded pays, types d\'entreprises, domaines, professions, categories and type abonnements'))
86 changes: 86 additions & 0 deletions Account/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Generated by Django 4.2 on 2023-10-22 19:00

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Members',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Pays',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.CharField(max_length=4)),
('name', models.CharField(max_length=255)),
('phone_code', models.CharField(max_length=255, null=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Professions',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('description', models.CharField(max_length=255, null=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Stacks',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('description', models.TextField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='UserStacks',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Users',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('last_name', models.CharField(max_length=255, null=True)),
('first_name', models.CharField(max_length=255, null=True)),
('phone', models.CharField(max_length=50, null=True, unique=True)),
('email', models.EmailField(max_length=255, unique=True, verbose_name='email address')),
('username', models.CharField(max_length=255, unique=True)),
('status', models.BooleanField(default=False)),
('password', models.CharField(max_length=255)),
('sexe', models.CharField(choices=[('Homme', 'HOMME'), ('Femme', 'FEMME'), ('Autre', 'AUTRE')], max_length=255, null=True)),
('is_superuser', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('pays', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Account.pays')),
('profession', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Account.professions')),
],
options={
'abstract': False,
},
),
]
43 changes: 43 additions & 0 deletions Account/migrations/0002_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Generated by Django 4.2 on 2023-10-22 19:00

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
('Permission', '0001_initial'),
('Account', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='users',
name='role',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='users_role', to='Permission.roles'),
),
migrations.AddField(
model_name='userstacks',
name='stack',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Account.stacks'),
),
migrations.AddField(
model_name='userstacks',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='members',
name='mentor',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mentor', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='members',
name='mentore',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mentore', to=settings.AUTH_USER_MODEL),
),
]
23 changes: 23 additions & 0 deletions Account/migrations/0003_users_is_active_users_is_staff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.2.2 on 2023-10-22 17:46

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('Account', '0002_initial'),
]

operations = [
migrations.AddField(
model_name='users',
name='is_active',
field=models.BooleanField(default=True),
),
migrations.AddField(
model_name='users',
name='is_staff',
field=models.BooleanField(default=False),
),
]
18 changes: 18 additions & 0 deletions Account/migrations/0004_users_is_superuser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-10-22 18:01

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('Account', '0003_users_is_active_users_is_staff'),
]

operations = [
migrations.AddField(
model_name='users',
name='is_superuser',
field=models.BooleanField(default=False),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 4.2.2 on 2023-10-22 19:17

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('Account', '0004_users_is_superuser'),
]

operations = [
migrations.RemoveField(
model_name='users',
name='is_active',
),
migrations.RemoveField(
model_name='users',
name='is_staff',
),
]
21 changes: 21 additions & 0 deletions Account/migrations/0006_auto_20231023_1224.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 3.2.11 on 2023-10-23 12:24

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('Account', '0005_remove_users_is_active_remove_users_is_staff'),
]

operations = [
migrations.AlterModelOptions(
name='members',
options={'verbose_name': 'Membre'},
),
migrations.AlterModelOptions(
name='users',
options={'verbose_name': 'Utilisateur'},
),
]
Empty file added Account/migrations/__init__.py
Empty file.
Loading