mirror of
https://github.com/ae-utbm/sith.git
synced 2024-12-23 08:11:19 +00:00
987 lines
35 KiB
Python
987 lines
35 KiB
Python
#
|
|
# Copyright 2016,2017,2023
|
|
# - Skia <skia@hya.sk>
|
|
#
|
|
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
|
|
# http://ae.utbm.fr.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it under
|
|
# the terms of the GNU General Public License a published by the Free Software
|
|
# Foundation; either version 3 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple
|
|
# Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
#
|
|
#
|
|
from datetime import date, timedelta
|
|
from io import StringIO
|
|
from pathlib import Path
|
|
from typing import ClassVar, NamedTuple
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import Permission
|
|
from django.contrib.sites.models import Site
|
|
from django.core.management import call_command
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import connection
|
|
from django.db.models import Q
|
|
from django.utils import timezone
|
|
from django.utils.timezone import localdate
|
|
from PIL import Image
|
|
|
|
from accounting.models import (
|
|
AccountingType,
|
|
BankAccount,
|
|
ClubAccount,
|
|
Company,
|
|
GeneralJournal,
|
|
Operation,
|
|
SimplifiedAccountingType,
|
|
)
|
|
from club.models import Club, Membership
|
|
from com.models import News, NewsDate, Sith, Weekmail
|
|
from core.models import Group, Page, PageRev, RealGroup, SithFile, User
|
|
from core.utils import resize_image
|
|
from counter.models import Counter, Product, ProductType, StudentCard
|
|
from election.models import Candidature, Election, ElectionList, Role
|
|
from forum.models import Forum
|
|
from pedagogy.models import UV
|
|
from sas.models import Album, PeoplePictureRelation, Picture
|
|
from subscription.models import Subscription
|
|
|
|
|
|
class PopulatedGroups(NamedTuple):
|
|
root: Group
|
|
public: Group
|
|
subscribers: Group
|
|
old_subscribers: Group
|
|
sas_admin: Group
|
|
com_admin: Group
|
|
counter_admin: Group
|
|
accounting_admin: Group
|
|
pedagogy_admin: Group
|
|
|
|
|
|
class Command(BaseCommand):
|
|
ROOT_PATH: ClassVar[Path] = Path(__file__).parent.parent.parent.parent
|
|
SAS_FIXTURE_PATH: ClassVar[Path] = (
|
|
ROOT_PATH / "core" / "fixtures" / "images" / "sas"
|
|
)
|
|
|
|
help = "Populate a new instance of the Sith AE"
|
|
|
|
def reset_index(self, *args):
|
|
if connection.vendor == "sqlite":
|
|
# sqlite doesn't support this operation
|
|
return
|
|
sqlcmd = StringIO()
|
|
call_command("sqlsequencereset", "--no-color", *args, stdout=sqlcmd)
|
|
cursor = connection.cursor()
|
|
cursor.execute(sqlcmd.getvalue())
|
|
|
|
def handle(self, *args, **options):
|
|
if not settings.DEBUG and not settings.TESTING:
|
|
raise Exception("Never call this command in prod. Never.")
|
|
|
|
Sith.objects.create(weekmail_destinations="etudiants@git.an personnel@git.an")
|
|
Site.objects.create(domain=settings.SITH_URL, name=settings.SITH_NAME)
|
|
groups = self._create_groups()
|
|
|
|
root = User.objects.create_superuser(
|
|
id=0,
|
|
username="root",
|
|
last_name="",
|
|
first_name="Bibou",
|
|
email="ae.info@utbm.fr",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
self.profiles_root = SithFile.objects.create(name="profiles", owner=root)
|
|
home_root = SithFile.objects.create(name="users", owner=root)
|
|
|
|
# Page needed for club creation
|
|
p = Page(name=settings.SITH_CLUB_ROOT_PAGE)
|
|
p.save(force_lock=True)
|
|
|
|
club_root = SithFile.objects.create(name="clubs", owner=root)
|
|
sas = SithFile.objects.create(name="SAS", owner=root)
|
|
main_club = Club.objects.create(
|
|
id=1,
|
|
name=settings.SITH_MAIN_CLUB["name"],
|
|
unix_name=settings.SITH_MAIN_CLUB["unix_name"],
|
|
address=settings.SITH_MAIN_CLUB["address"],
|
|
)
|
|
bar_club = Club.objects.create(
|
|
id=2,
|
|
name=settings.SITH_BAR_MANAGER["name"],
|
|
unix_name=settings.SITH_BAR_MANAGER["unix_name"],
|
|
address=settings.SITH_BAR_MANAGER["address"],
|
|
)
|
|
Club.objects.create(
|
|
id=84,
|
|
name=settings.SITH_LAUNDERETTE_MANAGER["name"],
|
|
unix_name=settings.SITH_LAUNDERETTE_MANAGER["unix_name"],
|
|
address=settings.SITH_LAUNDERETTE_MANAGER["address"],
|
|
)
|
|
|
|
self.reset_index("club")
|
|
for bar_id, bar_name in settings.SITH_COUNTER_BARS:
|
|
Counter(id=bar_id, name=bar_name, club=bar_club, type="BAR").save()
|
|
self.reset_index("counter")
|
|
counters = [
|
|
Counter(name="Eboutic", club=main_club, type="EBOUTIC"),
|
|
Counter(name="AE", club=main_club, type="OFFICE"),
|
|
Counter(name="Vidage comptes AE", club=main_club, type="OFFICE"),
|
|
]
|
|
Counter.objects.bulk_create(counters)
|
|
bar_groups = []
|
|
for bar_id, bar_name in settings.SITH_COUNTER_BARS:
|
|
group = RealGroup.objects.create(name=f"{bar_name} admin")
|
|
bar_groups.append(
|
|
Counter.edit_groups.through(counter_id=bar_id, group=group)
|
|
)
|
|
Counter.edit_groups.through.objects.bulk_create(bar_groups)
|
|
self.reset_index("counter")
|
|
|
|
groups.subscribers.viewable_files.add(home_root, club_root)
|
|
|
|
Weekmail().save()
|
|
|
|
# Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment
|
|
self.now = timezone.now().replace(hour=12)
|
|
|
|
skia = User.objects.create_user(
|
|
username="skia",
|
|
last_name="Kia",
|
|
first_name="S'",
|
|
email="skia@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
public = User.objects.create_user(
|
|
username="public",
|
|
last_name="Not subscribed",
|
|
first_name="Public",
|
|
email="public@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
subscriber = User.objects.create_user(
|
|
username="subscriber",
|
|
last_name="User",
|
|
first_name="Subscribed",
|
|
email="Subscribed@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
old_subscriber = User.objects.create_user(
|
|
username="old_subscriber",
|
|
last_name="Subscriber",
|
|
first_name="Old",
|
|
email="old_subscriber@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
counter = User.objects.create_user(
|
|
username="counter",
|
|
last_name="Ter",
|
|
first_name="Coun",
|
|
email="counter@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
comptable = User.objects.create_user(
|
|
username="comptable",
|
|
last_name="Able",
|
|
first_name="Compte",
|
|
email="compta@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
User.objects.create_user(
|
|
username="guy",
|
|
last_name="Carlier",
|
|
first_name="Guy",
|
|
email="guy@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
richard = User.objects.create_user(
|
|
username="rbatsbak",
|
|
last_name="Batsbak",
|
|
first_name="Richard",
|
|
email="richard@git.an",
|
|
date_of_birth="1982-06-12",
|
|
password="plop",
|
|
)
|
|
sli = User.objects.create_user(
|
|
username="sli",
|
|
last_name="Li",
|
|
first_name="S",
|
|
email="sli@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
krophil = User.objects.create_user(
|
|
username="krophil",
|
|
last_name="Phil'",
|
|
first_name="Kro",
|
|
email="krophil@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
comunity = User.objects.create_user(
|
|
username="comunity",
|
|
last_name="Unity",
|
|
first_name="Com",
|
|
email="comunity@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
tutu = User.objects.create_user(
|
|
username="tutu",
|
|
last_name="Tu",
|
|
first_name="Tu",
|
|
email="tutu@git.an",
|
|
date_of_birth="1942-06-12",
|
|
password="plop",
|
|
)
|
|
User.groups.through.objects.bulk_create(
|
|
[
|
|
User.groups.through(group=groups.counter_admin, user=counter),
|
|
User.groups.through(group=groups.accounting_admin, user=comptable),
|
|
User.groups.through(group=groups.com_admin, user=comunity),
|
|
User.groups.through(group=groups.pedagogy_admin, user=tutu),
|
|
User.groups.through(group=groups.sas_admin, user=skia),
|
|
]
|
|
)
|
|
for user in richard, sli, krophil, skia:
|
|
self._create_profile_pict(user)
|
|
|
|
User.godfathers.through.objects.bulk_create(
|
|
[
|
|
User.godfathers.through(from_user=richard, to_user=comptable),
|
|
User.godfathers.through(from_user=root, to_user=skia),
|
|
User.godfathers.through(from_user=skia, to_user=root),
|
|
User.godfathers.through(from_user=sli, to_user=skia),
|
|
User.godfathers.through(from_user=public, to_user=richard),
|
|
User.godfathers.through(from_user=subscriber, to_user=richard),
|
|
]
|
|
)
|
|
|
|
# Adding syntax help page
|
|
syntax_page = Page(name="Aide_sur_la_syntaxe")
|
|
syntax_page.save(force_lock=True)
|
|
PageRev.objects.create(
|
|
page=syntax_page,
|
|
title="Aide sur la syntaxe",
|
|
author=skia,
|
|
content=(self.ROOT_PATH / "core" / "fixtures" / "SYNTAX.md").read_text(),
|
|
)
|
|
services_page = Page(name="Services")
|
|
services_page.save(force_lock=True)
|
|
PageRev.objects.create(
|
|
page=services_page,
|
|
title="Services",
|
|
author=skia,
|
|
content="""
|
|
| | | |
|
|
| :---: | :---: | :---: |
|
|
| [Eboutic](/eboutic) | [Laverie](/launderette) | Matmat |
|
|
| SAS | Weekmail | Forum|
|
|
|
|
""",
|
|
)
|
|
|
|
index_page = Page(name="Index")
|
|
index_page.save(force_lock=True)
|
|
PageRev.objects.create(
|
|
page=index_page,
|
|
title="Wiki index",
|
|
author=root,
|
|
content="""
|
|
Welcome to the wiki page!
|
|
""",
|
|
)
|
|
|
|
laundry_page = Page(name="launderette")
|
|
laundry_page.save(force_lock=True)
|
|
PageRev.objects.create(
|
|
page=laundry_page,
|
|
title="Laverie",
|
|
author=root,
|
|
content="Fonctionnement de la laverie",
|
|
)
|
|
|
|
groups.public.viewable_page.set(
|
|
[syntax_page, services_page, index_page, laundry_page]
|
|
)
|
|
|
|
self._create_subscription(root)
|
|
self._create_subscription(skia)
|
|
self._create_subscription(counter)
|
|
self._create_subscription(comptable)
|
|
self._create_subscription(richard)
|
|
self._create_subscription(subscriber)
|
|
self._create_subscription(old_subscriber, start=date(year=2012, month=9, day=4))
|
|
self._create_subscription(sli)
|
|
self._create_subscription(krophil)
|
|
self._create_subscription(comunity)
|
|
self._create_subscription(tutu)
|
|
StudentCard(uid="9A89B82018B0A0", customer=sli.customer).save()
|
|
|
|
# Clubs
|
|
Club.objects.create(
|
|
name="Bibo'UT",
|
|
unix_name="bibout",
|
|
address="46 de la Boustifaille",
|
|
parent=main_club,
|
|
)
|
|
guyut = Club.objects.create(
|
|
name="Guy'UT",
|
|
unix_name="guyut",
|
|
address="42 de la Boustifaille",
|
|
parent=main_club,
|
|
)
|
|
Club.objects.create(
|
|
name="Woenzel'UT", unix_name="woenzel", address="Woenzel", parent=guyut
|
|
)
|
|
troll = Club.objects.create(
|
|
name="Troll Penché",
|
|
unix_name="troll",
|
|
address="Terre Du Milieu",
|
|
parent=main_club,
|
|
)
|
|
refound = Club.objects.create(
|
|
name="Carte AE",
|
|
unix_name="carte_ae",
|
|
address="Jamais imprimée",
|
|
parent=main_club,
|
|
)
|
|
|
|
Membership.objects.bulk_create(
|
|
[
|
|
Membership(user=skia, club=main_club, role=3),
|
|
Membership(
|
|
user=comunity,
|
|
club=bar_club,
|
|
start_date=localdate(),
|
|
role=settings.SITH_CLUB_ROLES_ID["Board member"],
|
|
),
|
|
Membership(
|
|
user=sli,
|
|
club=troll,
|
|
role=9,
|
|
description="Padawan Troll",
|
|
start_date=localdate() - timedelta(days=17),
|
|
),
|
|
Membership(
|
|
user=krophil,
|
|
club=troll,
|
|
role=10,
|
|
description="Maitre Troll",
|
|
start_date=localdate() - timedelta(days=200),
|
|
),
|
|
Membership(
|
|
user=skia,
|
|
club=troll,
|
|
role=2,
|
|
description="Grand Ancien Troll",
|
|
start_date=localdate() - timedelta(days=400),
|
|
end_date=localdate() - timedelta(days=86),
|
|
),
|
|
Membership(
|
|
user=richard,
|
|
club=troll,
|
|
role=2,
|
|
description="",
|
|
start_date=localdate() - timedelta(days=200),
|
|
end_date=localdate() - timedelta(days=100),
|
|
),
|
|
]
|
|
)
|
|
|
|
p = ProductType.objects.create(name="Bières bouteilles")
|
|
c = ProductType.objects.create(name="Cotisations")
|
|
r = ProductType.objects.create(name="Rechargements")
|
|
verre = ProductType.objects.create(name="Verre")
|
|
cotis = Product.objects.create(
|
|
name="Cotis 1 semestre",
|
|
code="1SCOTIZ",
|
|
product_type=c,
|
|
purchase_price="15",
|
|
selling_price="15",
|
|
special_selling_price="15",
|
|
club=main_club,
|
|
)
|
|
cotis2 = Product.objects.create(
|
|
name="Cotis 2 semestres",
|
|
code="2SCOTIZ",
|
|
product_type=c,
|
|
purchase_price="28",
|
|
selling_price="28",
|
|
special_selling_price="28",
|
|
club=main_club,
|
|
)
|
|
refill = Product.objects.create(
|
|
name="Rechargement 15 €",
|
|
code="15REFILL",
|
|
product_type=r,
|
|
purchase_price="15",
|
|
selling_price="15",
|
|
special_selling_price="15",
|
|
club=main_club,
|
|
)
|
|
barb = Product.objects.create(
|
|
name="Barbar",
|
|
code="BARB",
|
|
product_type=p,
|
|
purchase_price="1.50",
|
|
selling_price="1.7",
|
|
special_selling_price="1.6",
|
|
club=main_club,
|
|
limit_age=18,
|
|
)
|
|
cble = Product.objects.create(
|
|
name="Chimay Bleue",
|
|
code="CBLE",
|
|
product_type=p,
|
|
purchase_price="1.50",
|
|
selling_price="1.7",
|
|
special_selling_price="1.6",
|
|
club=main_club,
|
|
limit_age=18,
|
|
)
|
|
cons = Product.objects.create(
|
|
name="Consigne Eco-cup",
|
|
code="CONS",
|
|
product_type=verre,
|
|
purchase_price="1",
|
|
selling_price="1",
|
|
special_selling_price="1",
|
|
club=main_club,
|
|
)
|
|
dcons = Product.objects.create(
|
|
name="Déconsigne Eco-cup",
|
|
code="DECO",
|
|
product_type=verre,
|
|
purchase_price="-1",
|
|
selling_price="-1",
|
|
special_selling_price="-1",
|
|
club=main_club,
|
|
)
|
|
cors = Product.objects.create(
|
|
name="Corsendonk",
|
|
code="CORS",
|
|
product_type=p,
|
|
purchase_price="1.50",
|
|
selling_price="1.7",
|
|
special_selling_price="1.6",
|
|
club=main_club,
|
|
limit_age=18,
|
|
)
|
|
carolus = Product.objects.create(
|
|
name="Carolus",
|
|
code="CARO",
|
|
product_type=p,
|
|
purchase_price="1.50",
|
|
selling_price="1.7",
|
|
special_selling_price="1.6",
|
|
club=main_club,
|
|
limit_age=18,
|
|
)
|
|
groups.subscribers.products.add(
|
|
cotis, cotis2, refill, barb, cble, cors, carolus
|
|
)
|
|
groups.old_subscribers.products.add(cotis, cotis2)
|
|
|
|
mde = Counter.objects.get(name="MDE")
|
|
mde.products.add(barb, cble, cons, dcons)
|
|
|
|
eboutic = Counter.objects.get(name="Eboutic")
|
|
eboutic.products.add(barb, cotis, cotis2, refill)
|
|
|
|
Counter.objects.create(name="Carte AE", club=refound, type="OFFICE")
|
|
Product.objects.create(
|
|
name="remboursement",
|
|
code="REMBOURS",
|
|
purchase_price="0",
|
|
selling_price="0",
|
|
special_selling_price="0",
|
|
club=refound,
|
|
)
|
|
|
|
# Accounting test values:
|
|
BankAccount.objects.create(name="AE TG", club=main_club)
|
|
BankAccount.objects.create(name="Carte AE", club=main_club)
|
|
ba = BankAccount.objects.create(name="AE TI", club=main_club)
|
|
ca = ClubAccount.objects.create(
|
|
name="Troll Penché", bank_account=ba, club=troll
|
|
)
|
|
gj = GeneralJournal.objects.create(
|
|
name="A16", start_date=date.today(), club_account=ca
|
|
)
|
|
credit = AccountingType.objects.create(
|
|
code="74", label="Subventions d'exploitation", movement_type="CREDIT"
|
|
)
|
|
debit = AccountingType.objects.create(
|
|
code="606",
|
|
label="Achats non stockés de matières et fournitures(*1)",
|
|
movement_type="DEBIT",
|
|
)
|
|
debit2 = AccountingType.objects.create(
|
|
code="604",
|
|
label="Achats d'études et prestations de services(*2)",
|
|
movement_type="DEBIT",
|
|
)
|
|
buying = AccountingType.objects.create(
|
|
code="60", label="Achats (sauf 603)", movement_type="DEBIT"
|
|
)
|
|
comptes = AccountingType.objects.create(
|
|
code="6", label="Comptes de charge", movement_type="DEBIT"
|
|
)
|
|
SimplifiedAccountingType.objects.create(
|
|
label="Je fais du simple 6", accounting_type=comptes
|
|
)
|
|
woenzco = Company.objects.create(name="Woenzel & co")
|
|
|
|
operation_list = [
|
|
(27, "J'avais trop de bière", "CASH", buying, "USER", skia.id, None),
|
|
(4000, "Pas une opération", "CHECK", debit, "COMPANY", woenzco.id, 23),
|
|
(22, "C'est de l'argent ?", "CARD", credit, "CLUB", troll.id, None),
|
|
(37, "Je paye CASH", "CASH", debit2, "OTHER", None, None),
|
|
(300, "Paiement Guy", "CASH", buying, "USER", skia.id, None),
|
|
(32.3, "Essence", "CASH", buying, "OTHER", None, None),
|
|
(46.42, "Allumette", "CHECK", credit, "CLUB", main_club.id, 57),
|
|
(666.42, "Subvention club", "CASH", comptes, "CLUB", main_club.id, None),
|
|
(496, "Ça, c'est un 6", "CARD", comptes, "USER", skia.id, None),
|
|
(17, "La Gargotte du Korrigan", "CASH", debit2, "CLUB", bar_club.id, None),
|
|
]
|
|
operations = [
|
|
Operation(
|
|
number=index,
|
|
journal=gj,
|
|
date=localdate(),
|
|
amount=op[0],
|
|
remark=op[1],
|
|
mode=op[2],
|
|
done=True,
|
|
accounting_type=op[3],
|
|
target_type=op[4],
|
|
target_id=op[5],
|
|
target_label="" if op[4] != "OTHER" else "Autre source",
|
|
cheque_number=op[6],
|
|
)
|
|
for index, op in enumerate(operation_list, start=1)
|
|
]
|
|
for operation in operations:
|
|
operation.clean()
|
|
Operation.objects.bulk_create(operations)
|
|
|
|
# Add barman to counter
|
|
Counter.sellers.through.objects.bulk_create(
|
|
[
|
|
Counter.sellers.through(counter_id=2, user=krophil),
|
|
Counter.sellers.through(counter=mde, user=skia),
|
|
]
|
|
)
|
|
|
|
# Create an election
|
|
ae_board_group = Group.objects.get(name=settings.SITH_MAIN_BOARD_GROUP)
|
|
el = Election.objects.create(
|
|
title="Élection 2017",
|
|
description="La roue tourne",
|
|
start_candidature="1942-06-12 10:28:45+01",
|
|
end_candidature="2042-06-12 10:28:45+01",
|
|
start_date="1942-06-12 10:28:45+01",
|
|
end_date="7942-06-12 10:28:45+01",
|
|
)
|
|
el.view_groups.add(groups.public)
|
|
el.edit_groups.add(ae_board_group)
|
|
el.candidature_groups.add(groups.subscribers)
|
|
el.vote_groups.add(groups.subscribers)
|
|
liste = ElectionList.objects.create(title="Candidature Libre", election=el)
|
|
listeT = ElectionList.objects.create(title="Troll", election=el)
|
|
pres = Role.objects.create(
|
|
election=el, title="Président AE", description="Roi de l'AE"
|
|
)
|
|
resp = Role.objects.create(
|
|
election=el, title="Co Respo Info", max_choice=2, description="Ghetto++"
|
|
)
|
|
Candidature.objects.bulk_create(
|
|
[
|
|
Candidature(
|
|
role=resp,
|
|
user=skia,
|
|
election_list=liste,
|
|
program="Refesons le site AE",
|
|
),
|
|
Candidature(
|
|
role=resp,
|
|
user=sli,
|
|
election_list=liste,
|
|
program="Vasy je deviens mon propre adjoint",
|
|
),
|
|
Candidature(
|
|
role=resp,
|
|
user=krophil,
|
|
election_list=listeT,
|
|
program="Le Pôle Troll !",
|
|
),
|
|
Candidature(
|
|
role=pres,
|
|
user=sli,
|
|
election_list=listeT,
|
|
program="En fait j'aime pas l'info, je voulais faire GMC",
|
|
),
|
|
]
|
|
)
|
|
|
|
# Forum
|
|
room = Forum.objects.create(
|
|
name="Salon de discussions",
|
|
description="Pour causer de tout",
|
|
is_category=True,
|
|
)
|
|
various = Forum.objects.create(
|
|
name="Divers", description="Pour causer de rien", is_category=True
|
|
)
|
|
Forum.objects.bulk_create(
|
|
[
|
|
Forum(name="AE", description="Réservé au bureau AE", parent=room),
|
|
Forum(name="BdF", description="Réservé au bureau BdF", parent=room),
|
|
Forum(name="Promos", description="Réservé aux Promos", parent=various),
|
|
Forum(
|
|
name="Hall de discussions",
|
|
description="Pour toutes les discussions",
|
|
parent=room,
|
|
),
|
|
]
|
|
)
|
|
|
|
# News
|
|
friday = self.now
|
|
while friday.weekday() != 4:
|
|
friday += timedelta(hours=6)
|
|
friday.replace(hour=20, minute=0, second=0)
|
|
# Event
|
|
news_dates = []
|
|
n = News.objects.create(
|
|
title="Apero barman",
|
|
summary="Viens boire un coup avec les barmans",
|
|
content="Glou glou glou glou glou glou glou",
|
|
type="EVENT",
|
|
club=bar_club,
|
|
author=subscriber,
|
|
is_moderated=True,
|
|
moderator=skia,
|
|
)
|
|
news_dates.append(
|
|
NewsDate(
|
|
news=n,
|
|
start_date=self.now + timedelta(hours=70),
|
|
end_date=self.now + timedelta(hours=72),
|
|
)
|
|
)
|
|
n = News.objects.create(
|
|
title="Repas barman",
|
|
summary="Enjoy la fin du semestre!",
|
|
content=(
|
|
"Viens donc t'enjailler avec les autres barmans aux "
|
|
"frais du BdF! \\o/"
|
|
),
|
|
type="EVENT",
|
|
club=bar_club,
|
|
author=subscriber,
|
|
is_moderated=True,
|
|
moderator=skia,
|
|
)
|
|
news_dates.append(
|
|
NewsDate(
|
|
news=n,
|
|
start_date=self.now + timedelta(hours=72),
|
|
end_date=self.now + timedelta(hours=84),
|
|
)
|
|
)
|
|
News.objects.create(
|
|
title="Repas fromager",
|
|
summary="Wien manger du l'bon fromeug'",
|
|
content="Fô viendre mangey d'la bonne fondue!",
|
|
type="EVENT",
|
|
club=bar_club,
|
|
author=subscriber,
|
|
is_moderated=True,
|
|
moderator=skia,
|
|
)
|
|
news_dates.append(
|
|
NewsDate(
|
|
news=n,
|
|
start_date=self.now + timedelta(hours=96),
|
|
end_date=self.now + timedelta(hours=100),
|
|
)
|
|
)
|
|
n = News.objects.create(
|
|
title="SdF",
|
|
summary="Enjoy la fin des finaux!",
|
|
content="Viens faire la fête avec tout plein de gens!",
|
|
type="EVENT",
|
|
club=bar_club,
|
|
author=subscriber,
|
|
is_moderated=True,
|
|
moderator=skia,
|
|
)
|
|
news_dates.append(
|
|
NewsDate(
|
|
news=n,
|
|
start_date=friday + timedelta(hours=24 * 7 + 1),
|
|
end_date=self.now + timedelta(hours=24 * 7 + 9),
|
|
)
|
|
)
|
|
# Weekly
|
|
n = News.objects.create(
|
|
title="Jeux sans faim",
|
|
summary="Viens jouer!",
|
|
content="Rejoins la fine équipe du Troll Penché et viens "
|
|
"t'amuser le Vendredi soir!",
|
|
type="WEEKLY",
|
|
club=troll,
|
|
author=subscriber,
|
|
is_moderated=True,
|
|
moderator=skia,
|
|
)
|
|
news_dates.extend(
|
|
[
|
|
NewsDate(
|
|
news=n,
|
|
start_date=friday + timedelta(days=7 * i),
|
|
end_date=friday + timedelta(days=7 * i, hours=8),
|
|
)
|
|
for i in range(10)
|
|
]
|
|
)
|
|
NewsDate.objects.bulk_create(news_dates)
|
|
|
|
# Create som data for pedagogy
|
|
|
|
UV(
|
|
code="PA00",
|
|
author=User.objects.get(id=0),
|
|
credit_type=settings.SITH_PEDAGOGY_UV_TYPE[3][0],
|
|
manager="Laurent HEYBERGER",
|
|
semester=settings.SITH_PEDAGOGY_UV_SEMESTER[3][0],
|
|
language=settings.SITH_PEDAGOGY_UV_LANGUAGE[0][0],
|
|
department=settings.SITH_PROFILE_DEPARTMENTS[-2][0],
|
|
credits=5,
|
|
title="Participation dans une association étudiante",
|
|
objectives="* Permettre aux étudiants de réaliser, pendant un semestre, un projet culturel ou associatif et de le valoriser.",
|
|
program="""* Semestre précédent proposition d'un projet et d'un cahier des charges
|
|
* Evaluation par un jury de six membres
|
|
* Si accord réalisation dans le cadre de l'UV
|
|
* Compte-rendu de l'expérience
|
|
* Présentation""",
|
|
skills="""* Gérer un projet associatif ou une action éducative en autonomie:
|
|
* en produisant un cahier des charges qui -définit clairement le contexte du projet personnel -pose les jalons de ce projet -estime de manière réaliste les moyens et objectifs du projet -définit exactement les livrables attendus
|
|
* en étant capable de respecter ce cahier des charges ou, le cas échéant, de réviser le cahier des charges de manière argumentée.
|
|
* Relater son expérience dans un rapport:
|
|
* qui permettra à d'autres étudiants de poursuivre les actions engagées
|
|
* qui montre la capacité à s'auto-évaluer et à adopter une distance critique sur son action.""",
|
|
key_concepts="""* Autonomie
|
|
* Responsabilité
|
|
* Cahier des charges
|
|
* Gestion de projet""",
|
|
hours_THE=121,
|
|
hours_TE=4,
|
|
).save()
|
|
|
|
# SAS
|
|
for f in self.SAS_FIXTURE_PATH.glob("*"):
|
|
if f.is_dir():
|
|
album = Album(
|
|
parent=sas,
|
|
name=f.name,
|
|
owner=root,
|
|
is_folder=True,
|
|
is_in_sas=True,
|
|
is_moderated=True,
|
|
)
|
|
album.clean()
|
|
album.save()
|
|
for p in f.iterdir():
|
|
file = resize_image(Image.open(p), 1000, "WEBP")
|
|
pict = Picture(
|
|
parent=album,
|
|
name=p.name,
|
|
file=file,
|
|
owner=root,
|
|
is_folder=False,
|
|
is_in_sas=True,
|
|
is_moderated=True,
|
|
mime_type="image/webp",
|
|
size=file.size,
|
|
)
|
|
pict.file.name = p.name
|
|
pict.clean()
|
|
pict.generate_thumbnails()
|
|
|
|
img_skia = Picture.objects.get(name="skia.jpg")
|
|
img_sli = Picture.objects.get(name="sli.jpg")
|
|
img_krophil = Picture.objects.get(name="krophil.jpg")
|
|
img_skia_sli = Picture.objects.get(name="skia_sli.jpg")
|
|
img_skia_sli_krophil = Picture.objects.get(name="skia_sli_krophil.jpg")
|
|
img_richard = Picture.objects.get(name="rbatsbak.jpg")
|
|
PeoplePictureRelation.objects.bulk_create(
|
|
[
|
|
PeoplePictureRelation(user=skia, picture=img_skia),
|
|
PeoplePictureRelation(user=sli, picture=img_sli),
|
|
PeoplePictureRelation(user=krophil, picture=img_krophil),
|
|
PeoplePictureRelation(user=skia, picture=img_skia_sli),
|
|
PeoplePictureRelation(user=sli, picture=img_skia_sli),
|
|
PeoplePictureRelation(user=skia, picture=img_skia_sli_krophil),
|
|
PeoplePictureRelation(user=sli, picture=img_skia_sli_krophil),
|
|
PeoplePictureRelation(user=krophil, picture=img_skia_sli_krophil),
|
|
PeoplePictureRelation(user=richard, picture=img_richard),
|
|
]
|
|
)
|
|
|
|
def _create_profile_pict(self, user: User):
|
|
path = self.SAS_FIXTURE_PATH / "Family" / f"{user.username}.jpg"
|
|
file = resize_image(Image.open(path), 400, "WEBP")
|
|
name = f"{user.id}_profile.webp"
|
|
profile = SithFile(
|
|
parent=self.profiles_root,
|
|
name=name,
|
|
file=file,
|
|
owner=user,
|
|
is_folder=False,
|
|
mime_type="image/webp",
|
|
size=file.size,
|
|
)
|
|
profile.file.name = name
|
|
profile.save()
|
|
user.profile_pict = profile
|
|
user.save()
|
|
|
|
def _create_subscription(
|
|
self,
|
|
user: User,
|
|
subscription_type: str = "un-semestre",
|
|
start: date | None = None,
|
|
):
|
|
s = Subscription(
|
|
member=user,
|
|
subscription_type=subscription_type,
|
|
payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0],
|
|
)
|
|
s.subscription_start = s.compute_start(start)
|
|
s.subscription_end = s.compute_end(
|
|
duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]["duration"],
|
|
start=s.subscription_start,
|
|
)
|
|
s.save()
|
|
|
|
def _create_groups(self) -> PopulatedGroups:
|
|
perms = Permission.objects.all()
|
|
|
|
root_group = Group.objects.create(name="Root")
|
|
root_group.permissions.add(*list(perms.values_list("pk", flat=True)))
|
|
# public has no permission.
|
|
# Its purpose is not to link users to permissions,
|
|
# but to other objects (like products)
|
|
public_group = Group.objects.create(name="Public")
|
|
|
|
subscribers = Group.objects.create(name="Subscribers")
|
|
old_subscribers = Group.objects.create(name="Old subscribers")
|
|
old_subscribers.permissions.add(
|
|
*list(
|
|
perms.filter(
|
|
codename__in=[
|
|
"view_user",
|
|
"view_picture",
|
|
"view_album",
|
|
"view_peoplepicturerelation",
|
|
"add_peoplepicturerelation",
|
|
]
|
|
)
|
|
)
|
|
)
|
|
accounting_admin = Group.objects.create(name="Accounting admin")
|
|
accounting_admin.permissions.add(
|
|
*list(
|
|
perms.filter(
|
|
Q(content_type__app_label="accounting")
|
|
| Q(
|
|
codename__in=[
|
|
"view_customer",
|
|
"view_product",
|
|
"change_product",
|
|
"add_product",
|
|
"view_producttype",
|
|
"change_producttype",
|
|
"add_producttype",
|
|
"delete_selling",
|
|
]
|
|
)
|
|
).values_list("pk", flat=True)
|
|
)
|
|
)
|
|
com_admin = Group.objects.create(name="Communication admin")
|
|
com_admin.permissions.add(
|
|
*list(
|
|
perms.filter(content_type__app_label="com").values_list("pk", flat=True)
|
|
)
|
|
)
|
|
counter_admin = Group.objects.create(name="Counter admin")
|
|
counter_admin.permissions.add(
|
|
*list(
|
|
perms.filter(
|
|
Q(content_type__app_label__in=["counter", "launderette"])
|
|
& ~Q(codename__in=["delete_product", "delete_producttype"])
|
|
)
|
|
)
|
|
)
|
|
Group.objects.create(name="Banned from buying alcohol")
|
|
Group.objects.create(name="Banned from counters")
|
|
Group.objects.create(name="Banned to subscribe")
|
|
sas_admin = Group.objects.create(name="SAS admin")
|
|
sas_admin.permissions.add(
|
|
*list(
|
|
perms.filter(content_type__app_label="sas").values_list("pk", flat=True)
|
|
)
|
|
)
|
|
forum_admin = Group.objects.create(name="Forum admin")
|
|
forum_admin.permissions.add(
|
|
*list(
|
|
perms.filter(content_type__app_label="forum").values_list(
|
|
"pk", flat=True
|
|
)
|
|
)
|
|
)
|
|
pedagogy_admin = Group.objects.create(name="Pedagogy admin")
|
|
pedagogy_admin.permissions.add(
|
|
*list(
|
|
perms.filter(content_type__app_label="pedagogy").values_list(
|
|
"pk", flat=True
|
|
)
|
|
)
|
|
)
|
|
self.reset_index("core", "auth")
|
|
|
|
return PopulatedGroups(
|
|
root=root_group,
|
|
public=public_group,
|
|
subscribers=subscribers,
|
|
old_subscribers=old_subscribers,
|
|
com_admin=com_admin,
|
|
counter_admin=counter_admin,
|
|
accounting_admin=accounting_admin,
|
|
sas_admin=sas_admin,
|
|
pedagogy_admin=pedagogy_admin,
|
|
)
|