settings.py 19.2 KB
Newer Older
1 2 3 4
# -*- coding:utf-8 -*
#
# Copyright 2016,2017
# - Skia <skia@libskia.so>
Sli's avatar
Sli committed
5
# - Sli <antoine@bartuccio.fr>
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#
# 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.
#
#

Skia's avatar
Skia committed
26 27 28 29 30 31 32 33 34 35 36 37 38 39
"""
Django settings for sith project.

Generated by 'django-admin startproject' using Django 1.8.6.

For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.8/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
Skia's avatar
Skia committed
40
import sys
Skia's avatar
Skia committed
41
import binascii
Sli's avatar
Sli committed
42 43
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
Skia's avatar
Skia committed
44
from django.utils.translation import ugettext_lazy as _
Skia's avatar
Skia committed
45 46 47

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

Sli's avatar
Sli committed
48
os.environ["HTTPS"] = "off"
Skia's avatar
Skia committed
49 50 51 52 53

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
Sli's avatar
Sli committed
54
SECRET_KEY = "(4sjxvhz@m5$0a$j0_pqicnc$s!vbve)z+&++m%g%bjhlz4+g2"
Skia's avatar
Skia committed
55 56

# SECURITY WARNING: don't run with debug turned on in production!
Skia's avatar
Skia committed
57
DEBUG = False
Sli's avatar
Sli committed
58
INTERNAL_IPS = ["127.0.0.1"]
Skia's avatar
Skia committed
59

Sli's avatar
Sli committed
60
ALLOWED_HOSTS = ["*"]
Skia's avatar
Skia committed
61 62 63 64


# Application definition

65
SITE_ID = 4000
66

Skia's avatar
Skia committed
67
INSTALLED_APPS = (
Sli's avatar
Sli committed
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "django.contrib.sites",
    "django_jinja",
    "rest_framework",
    "ajax_select",
    "haystack",
    "captcha",
    "core",
    "club",
    "subscription",
    "accounting",
    "counter",
    "eboutic",
    "launderette",
    "api",
    "rootplace",
    "sas",
    "com",
    "election",
    "forum",
    "stock",
    "trombi",
    "matmat",
Sli's avatar
Sli committed
96
    "pedagogy",
Skia's avatar
Skia committed
97 98
)

99
MIDDLEWARE = (
Sli's avatar
Sli committed
100 101 102 103 104 105 106 107 108
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.locale.LocaleMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "django.middleware.security.SecurityMiddleware",
    "core.middleware.AuthenticationMiddleware",
Skia's avatar
Skia committed
109 110
)

Sli's avatar
Sli committed
111
ROOT_URLCONF = "sith.urls"
Skia's avatar
Skia committed
112 113 114 115 116 117 118 119 120 121 122

TEMPLATES = [
    {
        "NAME": "jinja2",
        "BACKEND": "django_jinja.backend.Jinja2",
        "APP_DIRS": True,
        "OPTIONS": {
            "match_extension": ".jinja",
            "app_dirname": "templates",
            "newstyle_gettext": True,
            "context_processors": [
Krophil's avatar
Krophil committed
123 124 125 126 127 128 129 130
                "django.contrib.auth.context_processors.auth",
                "django.template.context_processors.debug",
                "django.template.context_processors.i18n",
                "django.template.context_processors.media",
                "django.template.context_processors.static",
                "django.template.context_processors.tz",
                "django.contrib.messages.context_processors.messages",
            ],
Skia's avatar
Skia committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
            "extensions": [
                "jinja2.ext.do",
                "jinja2.ext.loopcontrols",
                "jinja2.ext.with_",
                "jinja2.ext.i18n",
                "jinja2.ext.autoescape",
                "django_jinja.builtins.extensions.CsrfExtension",
                "django_jinja.builtins.extensions.CacheExtension",
                "django_jinja.builtins.extensions.TimezoneExtension",
                "django_jinja.builtins.extensions.UrlsExtension",
                "django_jinja.builtins.extensions.StaticFilesExtension",
                "django_jinja.builtins.extensions.DjangoFiltersExtension",
            ],
            "filters": {
                "markdown": "core.templatetags.renderer.markdown",
Skia's avatar
Skia committed
146
                "phonenumber": "core.templatetags.renderer.phonenumber",
Skia's avatar
Skia committed
147 148 149 150 151 152
            },
            "globals": {
                "can_edit_prop": "core.views.can_edit_prop",
                "can_edit": "core.views.can_edit",
                "can_view": "core.views.can_view",
                "settings": "sith.settings",
Skia's avatar
Skia committed
153
                "Launderette": "launderette.models.Launderette",
Skia's avatar
Skia committed
154
                "Counter": "counter.models.Counter",
155
                "ProductType": "counter.models.ProductType",
Skia's avatar
Skia committed
156
                "timezone": "django.utils.timezone",
157
                "get_sith": "com.views.sith",
Sli's avatar
Sli committed
158
                "scss": "core.templatetags.renderer.scss",
Skia's avatar
Skia committed
159 160 161 162 163 164 165
            },
            "bytecode_cache": {
                "name": "default",
                "backend": "django_jinja.cache.BytecodeCache",
                "enabled": False,
            },
            "autoescape": True,
Skia's avatar
Skia committed
166
            "auto_reload": True,
Skia's avatar
Skia committed
167
            "translation_engine": "django.utils.translation",
Sli's avatar
Sli committed
168
        },
Skia's avatar
Skia committed
169 170
    },
    {
Sli's avatar
Sli committed
171 172 173 174 175 176 177 178 179 180
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ]
Skia's avatar
Skia committed
181 182 183 184
        },
    },
]

Skia's avatar
Skia committed
185
HAYSTACK_CONNECTIONS = {
Sli's avatar
Sli committed
186
    "default": {
Skia's avatar
Skia committed
187 188 189
        "ENGINE": "xapian_backend.XapianEngine",
        "PATH": os.path.join(os.path.dirname(__file__), "search_indexes", "xapian"),
        "INCLUDE_SPELLING": True,
Sli's avatar
Sli committed
190
    }
Krophil's avatar
Krophil committed
191
}
Skia's avatar
Skia committed
192

193
HAYSTACK_SIGNAL_PROCESSOR = "core.search_indexes.IndexSignalProcessor"
194

Krophil's avatar
Krophil committed
195 196
SASS_PRECISION = 8

Sli's avatar
Sli committed
197
WSGI_APPLICATION = "sith.wsgi.application"
Skia's avatar
Skia committed
198

tleb's avatar
tleb committed
199 200
REST_FRAMEWORK = {}

Skia's avatar
Skia committed
201 202 203 204 205

# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases

DATABASES = {
Sli's avatar
Sli committed
206 207 208
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
Skia's avatar
Skia committed
209 210 211 212 213 214 215
    }
}


# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/

Sli's avatar
Sli committed
216
LANGUAGE_CODE = "fr-FR"
Skia's avatar
Skia committed
217

Sli's avatar
Sli committed
218
LANGUAGES = [("en", _("English")), ("fr", _("French"))]
Skia's avatar
Skia committed
219

Sli's avatar
Sli committed
220
TIME_ZONE = "Europe/Paris"
Skia's avatar
Skia committed
221 222 223 224 225 226 227

USE_I18N = True

USE_L10N = True

USE_TZ = True

Sli's avatar
Sli committed
228
LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),)
Skia's avatar
Skia committed
229

230 231
PHONENUMBER_DEFAULT_REGION = "FR"

Skia's avatar
Skia committed
232
# Medias
Sli's avatar
Sli committed
233 234
MEDIA_ROOT = "./data/"
MEDIA_URL = "/data/"
Skia's avatar
Skia committed
235 236 237 238

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

Sli's avatar
Sli committed
239 240
STATIC_URL = "/static/"
STATIC_ROOT = "./static/"
Skia's avatar
Skia committed
241

Krophil's avatar
Krophil committed
242 243
# Static files finders which allow to see static folder in all apps
STATICFILES_FINDERS = [
Sli's avatar
Sli committed
244 245 246
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
    "core.scss.finder.ScssFinder",
Krophil's avatar
Krophil committed
247 248
]

Skia's avatar
Skia committed
249
# Auth configuration
Sli's avatar
Sli committed
250 251 252 253 254
AUTH_USER_MODEL = "core.User"
AUTH_ANONYMOUS_MODEL = "core.models.AnonymousUser"
LOGIN_URL = "/login"
LOGOUT_URL = "/logout"
LOGIN_REDIRECT_URL = "/"
Krophil's avatar
Krophil committed
255 256
DEFAULT_FROM_EMAIL = "bibou@git.an"
SITH_COM_EMAIL = "bibou_com@git.an"
tleb's avatar
tleb committed
257
REST_FRAMEWORK["UNAUTHENTICATED_USER"] = "core.models.AnonymousUser"
Skia's avatar
Skia committed
258 259

# Email
Sli's avatar
Sli committed
260
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
Krophil's avatar
Krophil committed
261 262
EMAIL_HOST = "localhost"
EMAIL_PORT = 25
Skia's avatar
Skia committed
263

Skia's avatar
Skia committed
264 265 266 267
# Below this line, only Sith-specific variables are defined

IS_OLD_MYSQL_PRESENT = False
OLD_MYSQL_INFOS = {
Sli's avatar
Sli committed
268 269 270 271 272 273
    "host": "ae-db",
    "user": "my_user",
    "passwd": "password",
    "db": "ae2-db",
    "charset": "utf8",
    "use_unicode": True,
Krophil's avatar
Krophil committed
274
}
Skia's avatar
Skia committed
275 276


Skia's avatar
Skia committed
277 278
SITH_URL = "my.url.git.an"
SITH_NAME = "Sith website"
Krophil's avatar
Krophil committed
279
SITH_TWITTER = "@ae_utbm"
280

Skia's avatar
Skia committed
281
# AE configuration
Sli's avatar
Sli committed
282
SITH_MAIN_CLUB_ID = 1  # TODO: keep only that first setting, with the ID, and do the same for the other clubs
Skia's avatar
Skia committed
283
SITH_MAIN_CLUB = {
Sli's avatar
Sli committed
284 285 286
    "name": "AE",
    "unix_name": "ae",
    "address": "6 Boulevard Anatole France, 90000 Belfort",
Krophil's avatar
Krophil committed
287
}
288 289 290

# Bar managers
SITH_BAR_MANAGER = {
Sli's avatar
Sli committed
291 292 293
    "name": "BdF",
    "unix_name": "bdf",
    "address": "6 Boulevard Anatole France, 90000 Belfort",
Krophil's avatar
Krophil committed
294
}
295

Skia's avatar
Skia committed
296 297
# Launderette managers
SITH_LAUNDERETTE_MANAGER = {
Sli's avatar
Sli committed
298 299 300
    "name": "Laverie",
    "unix_name": "laverie",
    "address": "6 Boulevard Anatole France, 90000 Belfort",
Krophil's avatar
Krophil committed
301
}
Skia's avatar
Skia committed
302

Sli's avatar
Sli committed
303 304 305
# Main root for club pages
SITH_CLUB_ROOT_PAGE = "clubs"

Skia's avatar
Skia committed
306 307
# Define the date in the year serving as reference for the subscriptions calendar
# (month, day)
Krophil's avatar
Krophil committed
308
SITH_START_DATE = (8, 15)  # 15th August
309

310 311 312
# Used to determine the valid promos
SITH_SCHOOL_START_YEAR = 1999

Skia's avatar
Skia committed
313
SITH_GROUP_ROOT_ID = 1
Skia's avatar
Skia committed
314
SITH_GROUP_PUBLIC_ID = 2
315 316 317 318 319 320 321 322 323 324
SITH_GROUP_SUBSCRIBERS_ID = 3
SITH_GROUP_OLD_SUBSCRIBERS_ID = 4
SITH_GROUP_ACCOUNTING_ADMIN_ID = 5
SITH_GROUP_COM_ADMIN_ID = 6
SITH_GROUP_COUNTER_ADMIN_ID = 7
SITH_GROUP_BANNED_ALCOHOL_ID = 8
SITH_GROUP_BANNED_COUNTER_ID = 9
SITH_GROUP_BANNED_SUBSCRIPTION_ID = 10
SITH_GROUP_SAS_ADMIN_ID = 11
SITH_GROUP_FORUM_ADMIN_ID = 12
Sli's avatar
Sli committed
325
SITH_GROUP_PEDAGOGY_ADMIN_ID = 13
326

Skia's avatar
Skia committed
327

Sli's avatar
Sli committed
328 329 330 331
SITH_CLUB_REFOUND_ID = 89
SITH_COUNTER_REFOUND_ID = 38
SITH_PRODUCT_REFOUND_ID = 5

332 333 334
# Pages
SITH_CORE_PAGE_SYNTAX = "Aide_sur_la_syntaxe"

Skia's avatar
Skia committed
335 336 337
# Forum

SITH_FORUM_PAGE_LENGTH = 30
Sli's avatar
Sli committed
338

Skia's avatar
Skia committed
339 340
# SAS variables
SITH_SAS_ROOT_DIR_ID = 4
Sli's avatar
Sli committed
341
SITH_SAS_IMAGES_PER_PAGE = 30
Skia's avatar
Skia committed
342

Krophil's avatar
Krophil committed
343 344
SITH_BOARD_SUFFIX = "-bureau"
SITH_MEMBER_SUFFIX = "-membres"
Skia's avatar
Skia committed
345

Sli's avatar
Sli committed
346 347 348
SITH_MAIN_BOARD_GROUP = SITH_MAIN_CLUB["unix_name"] + SITH_BOARD_SUFFIX
SITH_MAIN_MEMBERS_GROUP = SITH_MAIN_CLUB["unix_name"] + SITH_MEMBER_SUFFIX
SITH_BAR_MANAGER_BOARD_GROUP = SITH_BAR_MANAGER["unix_name"] + SITH_BOARD_SUFFIX
Skia's avatar
Skia committed
349

Skia's avatar
Skia committed
350
SITH_PROFILE_DEPARTMENTS = [
Krophil's avatar
Krophil committed
351 352 353 354 355 356 357 358 359 360 361 362 363 364
    ("TC", _("TC")),
    ("IMSI", _("IMSI")),
    ("IMAP", _("IMAP")),
    ("INFO", _("INFO")),
    ("GI", _("GI")),
    ("E", _("E")),
    ("EE", _("EE")),
    ("GESC", _("GESC")),
    ("GMC", _("GMC")),
    ("MC", _("MC")),
    ("EDIM", _("EDIM")),
    ("HUMA", _("Humanities")),
    ("NA", _("N/A")),
]
Skia's avatar
Skia committed
365

Skia's avatar
Skia committed
366
SITH_ACCOUNTING_PAYMENT_METHOD = [
Sli's avatar
Sli committed
367 368 369 370
    ("CHECK", _("Check")),
    ("CASH", _("Cash")),
    ("TRANSFERT", _("Transfert")),
    ("CARD", _("Credit card")),
Krophil's avatar
Krophil committed
371
]
Skia's avatar
Skia committed
372 373

SITH_SUBSCRIPTION_PAYMENT_METHOD = [
Sli's avatar
Sli committed
374 375 376 377 378
    ("CHECK", _("Check")),
    ("CARD", _("Credit card")),
    ("CASH", _("Cash")),
    ("EBOUTIC", _("Eboutic")),
    ("OTHER", _("Other")),
Krophil's avatar
Krophil committed
379
]
Skia's avatar
Skia committed
380

Skia's avatar
Skia committed
381
SITH_SUBSCRIPTION_LOCATIONS = [
Sli's avatar
Sli committed
382 383 384 385
    ("BELFORT", _("Belfort")),
    ("SEVENANS", _("Sevenans")),
    ("MONTBELIARD", _("Montbéliard")),
    ("EBOUTIC", _("Eboutic")),
Krophil's avatar
Krophil committed
386
]
Skia's avatar
Skia committed
387

Sli's avatar
Sli committed
388
SITH_COUNTER_BARS = [(1, "MDE"), (2, "Foyer"), (35, "La Gommette")]
389

Skia's avatar
Skia committed
390
SITH_COUNTER_PAYMENT_METHOD = [
Sli's avatar
Sli committed
391 392 393
    ("CHECK", _("Check")),
    ("CASH", _("Cash")),
    ("CARD", _("Credit card")),
Krophil's avatar
Krophil committed
394
]
Skia's avatar
Skia committed
395

396
SITH_COUNTER_BANK = [
Sli's avatar
Sli committed
397 398 399 400 401 402 403 404 405 406
    ("OTHER", "Autre"),
    ("SOCIETE-GENERALE", "Société générale"),
    ("BANQUE-POPULAIRE", "Banque populaire"),
    ("BNP", "BNP"),
    ("CAISSE-EPARGNE", "Caisse d'épargne"),
    ("CIC", "CIC"),
    ("CREDIT-AGRICOLE", "Crédit Agricole"),
    ("CREDIT-MUTUEL", "Credit Mutuel"),
    ("CREDIT-LYONNAIS", "Credit Lyonnais"),
    ("LA-POSTE", "La Poste"),
Krophil's avatar
Krophil committed
407
]
408

409 410 411 412
SITH_PEDAGOGY_UV_TYPE = [
    ("FREE", _("Free")),
    ("CS", _("CS")),
    ("TM", _("TM")),
Sli's avatar
Sli committed
413 414
    ("OM", _("OM")),
    ("QC", _("QC")),
415 416
    ("EC", _("EC")),
    ("RN", _("RN")),
Sli's avatar
Sli committed
417
    ("ST", _("ST")),
418 419 420 421 422 423 424
    ("EXT", _("EXT")),
]

SITH_PEDAGOGY_UV_SEMESTER = [
    ("CLOSED", _("Closed")),
    ("AUTUMN", _("Autumn")),
    ("SPRING", _("Spring")),
425
    ("AUTUMN_AND_SPRING", _("Autumn and spring")),
426 427 428 429 430 431 432 433 434
]

SITH_PEDAGOGY_UV_LANGUAGE = [
    ("FR", _("French")),
    ("EN", _("English")),
    ("DE", _("German")),
    ("SP", _("Spanich")),
]

435 436 437 438 439 440 441 442 443 444 445
SITH_PEDAGOGY_UV_RESULT_GRADE = [
    ("A", _("A")),
    ("B", _("B")),
    ("C", _("C")),
    ("D", _("D")),
    ("E", _("E")),
    ("FX", _("FX")),
    ("F", _("F")),
    ("ABS", _("Abs")),
]

446
SITH_PEDAGOGY_UTBM_API = "https://extranet1.utbm.fr/gpedago/api/guide"
447

Sli's avatar
Sli committed
448
SITH_ECOCUP_CONS = 1152
Sli's avatar
Sli committed
449

Sli's avatar
Sli committed
450
SITH_ECOCUP_DECO = 1151
Sli's avatar
Sli committed
451

Sli's avatar
Sli committed
452
# The limit is the maximum difference between cons and deco possible for a customer
Sli's avatar
Sli committed
453
SITH_ECOCUP_LIMIT = 3
Sli's avatar
Sli committed
454

Sli's avatar
Sli committed
455 456 457
# Defines pagination for cash summary
SITH_COUNTER_CASH_SUMMARY_LENGTH = 50

458
# Defines which product type is the refilling type, and thus increases the account amount
Skia's avatar
Skia committed
459
SITH_COUNTER_PRODUCTTYPE_REFILLING = 3
460

461
# Defines which product is the one year subscription and which one is the six month subscription
Skia's avatar
Skia committed
462 463 464
SITH_PRODUCT_SUBSCRIPTION_ONE_SEMESTER = 1
SITH_PRODUCT_SUBSCRIPTION_TWO_SEMESTERS = 2
SITH_PRODUCTTYPE_SUBSCRIPTION = 2
465

Sli's avatar
Sli committed
466
SITH_CAN_CREATE_SUBSCRIPTIONS = [1]
467

468 469 470
# Number of weeks before the end of a subscription when the subscriber can resubscribe
SITH_SUBSCRIPTION_END = 10

Skia's avatar
Skia committed
471 472
# Subscription durations are in semestres
# Be careful, modifying this parameter will need a migration to be applied
Skia's avatar
Skia committed
473
SITH_SUBSCRIPTIONS = {
Sli's avatar
Sli committed
474 475 476 477 478 479
    "un-semestre": {"name": _("One semester"), "price": 15, "duration": 1},
    "deux-semestres": {"name": _("Two semesters"), "price": 28, "duration": 2},
    "cursus-tronc-commun": {
        "name": _("Common core cursus"),
        "price": 45,
        "duration": 4,
Skia's avatar
Skia committed
480
    },
Sli's avatar
Sli committed
481 482 483 484 485 486 487 488 489 490 491 492
    "cursus-branche": {"name": _("Branch cursus"), "price": 45, "duration": 6},
    "cursus-alternant": {"name": _("Alternating cursus"), "price": 30, "duration": 6},
    "membre-honoraire": {"name": _("Honorary member"), "price": 0, "duration": 666},
    "assidu": {"name": _("Assidu member"), "price": 0, "duration": 2},
    "amicale/doceo": {"name": _("Amicale/DOCEO member"), "price": 0, "duration": 2},
    "reseau-ut": {"name": _("UT network member"), "price": 0, "duration": 1},
    "crous": {"name": _("CROUS member"), "price": 0, "duration": 2},
    "sbarro/esta": {"name": _("Sbarro/ESTA member"), "price": 15, "duration": 2},
    "un-semestre-welcome": {
        "name": _("One semester Welcome Week"),
        "price": 0,
        "duration": 1,
Skia's avatar
Skia committed
493
    },
Sli's avatar
Sli committed
494 495 496 497 498 499
    "deux-mois-essai": {"name": _("Two months for free"), "price": 0, "duration": 0.33},
    "benevoles-euroks": {"name": _("Eurok's volunteer"), "price": 5, "duration": 0.1},
    "six-semaines-essai": {
        "name": _("Six weeks for free"),
        "price": 0,
        "duration": 0.23,
Skia's avatar
Skia committed
500
    },
501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527
    "un-jour": {"name": _("One day"), "price": 0, "duration": 0.00555333},
    # Discount subscriptions
    "un-semestre-reduction": {
        "name": _("One semester (-20%)"),
        "price": 12,
        "duration": 1,
    },
    "deux-semestres-reduction": {
        "name": _("Two semesters (-20%)"),
        "price": 22,
        "duration": 2,
    },
    "cursus-tronc-commun-reduction": {
        "name": _("Common core cursus (-20%)"),
        "price": 36,
        "duration": 4,
    },
    "cursus-branche-reduction": {
        "name": _("Branch cursus (-20%)"),
        "price": 36,
        "duration": 6,
    },
    "cursus-alternant-reduction": {
        "name": _("Alternating cursus (-20%)"),
        "price": 24,
        "duration": 6,
    }
Krophil's avatar
Krophil committed
528
    # To be completed....
Skia's avatar
Skia committed
529 530
}

Sli's avatar
Sli committed
531 532 533
SITH_CLUB_ROLES = {}

SITH_CLUB_ROLES_ID = {
Sli's avatar
Sli committed
534 535 536 537 538 539 540 541 542
    "President": 10,
    "Vice-President": 9,
    "Treasurer": 7,
    "Communication supervisor": 5,
    "Secretary": 4,
    "IT supervisor": 3,
    "Board member": 2,
    "Active member": 1,
    "Curious": 0,
Sli's avatar
Sli committed
543 544
}

Sli's avatar
Sli committed
545
SITH_CLUB_ROLES = {
Sli's avatar
Sli committed
546 547 548 549 550 551 552 553 554
    10: _("President"),
    9: _("Vice-President"),
    7: _("Treasurer"),
    5: _("Communication supervisor"),
    4: _("Secretary"),
    3: _("IT supervisor"),
    2: _("Board member"),
    1: _("Active member"),
    0: _("Curious"),
Sli's avatar
Sli committed
555
}
Skia's avatar
Skia committed
556 557 558

# This corresponds to the maximum role a user can freely subscribe to
# In this case, SITH_MAXIMUM_FREE_ROLE=1 means that a user can set himself as "Membre actif" or "Curieux", but not higher
Krophil's avatar
Krophil committed
559
SITH_MAXIMUM_FREE_ROLE = 1
Skia's avatar
Skia committed
560 561

# Minutes to timeout the logged barmen
Krophil's avatar
Krophil committed
562
SITH_BARMAN_TIMEOUT = 20
Skia's avatar
Skia committed
563

Skia's avatar
Skia committed
564
# Minutes to delete the last operations
Krophil's avatar
Krophil committed
565
SITH_LAST_OPERATIONS_LIMIT = 10
Skia's avatar
Skia committed
566

567
# Minutes for a counter to be inactive
Krophil's avatar
Krophil committed
568
SITH_COUNTER_MINUTE_INACTIVE = 10
569

Skia's avatar
Skia committed
570
# ET variables
Sli's avatar
Sli committed
571
SITH_EBOUTIC_CB_ENABLED = True
Sli's avatar
Sli committed
572 573 574
SITH_EBOUTIC_ET_URL = (
    "https://preprod-tpeweb.e-transactions.fr/cgi/MYchoix_pagepaiement.cgi"
)
Skia's avatar
Skia committed
575 576 577
SITH_EBOUTIC_PBX_SITE = "4000666"
SITH_EBOUTIC_PBX_RANG = "42"
SITH_EBOUTIC_PBX_IDENTIFIANT = "123456789"
Sli's avatar
Sli committed
578 579 580
SITH_EBOUTIC_HMAC_KEY = binascii.unhexlify(
    "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
)
Skia's avatar
Skia committed
581
SITH_EBOUTIC_PUB_KEY = ""
582
with open(os.path.join(os.path.dirname(__file__), "et_keys/pubkey.pem")) as f:
Skia's avatar
Skia committed
583 584
    SITH_EBOUTIC_PUB_KEY = f.read()

Skia's avatar
Skia committed
585
# Launderette variables
Sli's avatar
Sli committed
586 587
SITH_LAUNDERETTE_MACHINE_TYPES = [("WASHING", _("Washing")), ("DRYING", _("Drying"))]
SITH_LAUNDERETTE_PRICES = {"WASHING": 1.0, "DRYING": 0.75}
Skia's avatar
Skia committed
588

Skia's avatar
Skia committed
589
SITH_NOTIFICATIONS = [
Sli's avatar
Sli committed
590 591
    ("POSTER_MODERATION", _("A new poster needs to be moderated")),
    ("MAILING_MODERATION", _("A new mailing list needs to be moderated")),
592 593 594 595
    (
        "PEDAGOGY_MODERATION",
        _("A new pedagogy comment has been signaled for moderation"),
    ),
Sli's avatar
Sli committed
596 597 598 599 600 601 602
    ("NEWS_MODERATION", _("There are %s fresh news to be moderated")),
    ("FILE_MODERATION", _("New files to be moderated")),
    ("SAS_MODERATION", _("There are %s pictures to be moderated in the SAS")),
    ("NEW_PICTURES", _("You've been identified on some pictures")),
    ("REFILLING", _("You just refilled of %s €")),
    ("SELLING", _("You just bought %s")),
    ("GENERIC", _("You have a notification")),
Krophil's avatar
Krophil committed
603
]
Skia's avatar
Skia committed
604

605 606 607 608
# The keys are the notification names as found in SITH_NOTIFICATIONS, and the
# values are the callback function to update the notifs.
# The callback must take the notif object as first and single argument.
SITH_PERMANENT_NOTIFICATIONS = {
Sli's avatar
Sli committed
609 610
    "NEWS_MODERATION": "com.models.news_notification_callback",
    "SAS_MODERATION": "sas.models.sas_notification_callback",
611 612
}

Skia's avatar
Skia committed
613
SITH_QUICK_NOTIF = {
Sli's avatar
Sli committed
614 615 616 617 618
    "qn_success": _("Success!"),
    "qn_fail": _("Fail!"),
    "qn_weekmail_new_article": _("You successfully posted an article in the Weekmail"),
    "qn_weekmail_article_edit": _("You successfully edited an article in the Weekmail"),
    "qn_weekmail_send_success": _("You successfully sent the Weekmail"),
Krophil's avatar
Krophil committed
619
}
Skia's avatar
Skia committed
620

Sli's avatar
Sli committed
621 622
# Mailing related settings

Sli's avatar
Sli committed
623 624
SITH_MAILING_DOMAIN = "utbm.fr"
SITH_MAILING_FETCH_KEY = "IloveMails"
Sli's avatar
Sli committed
625

Sli's avatar
Sli committed
626
SITH_GIFT_LIST = [("AE Tee-shirt", _("AE tee-shirt"))]
Sli's avatar
Sli committed
627

Sli's avatar
Sli committed
628 629
SENTRY_DSN = ""

Skia's avatar
Skia committed
630 631
try:
    from .settings_custom import *
Sli's avatar
Sli committed
632

Skia's avatar
Skia committed
633
    print("Custom settings imported", file=sys.stderr)
Skia's avatar
Skia committed
634
except:
Skia's avatar
Skia committed
635
    print("Custom settings failed", file=sys.stderr)
Skia's avatar
Skia committed
636 637 638

if DEBUG:
    INSTALLED_APPS += ("debug_toolbar",)
639
    MIDDLEWARE = ("debug_toolbar.middleware.DebugToolbarMiddleware",) + MIDDLEWARE
Sli's avatar
Sli committed
640
    DEBUG_TOOLBAR_PANELS = [
Sli's avatar
Sli committed
641 642 643 644 645 646 647 648 649 650 651 652
        "debug_toolbar.panels.versions.VersionsPanel",
        "debug_toolbar.panels.timer.TimerPanel",
        "debug_toolbar.panels.settings.SettingsPanel",
        "debug_toolbar.panels.headers.HeadersPanel",
        "debug_toolbar.panels.request.RequestPanel",
        "debug_toolbar.panels.sql.SQLPanel",
        "debug_toolbar.panels.staticfiles.StaticFilesPanel",
        "sith.toolbar_debug.TemplatesPanel",
        "debug_toolbar.panels.cache.CachePanel",
        "debug_toolbar.panels.signals.SignalsPanel",
        "debug_toolbar.panels.logging.LoggingPanel",
        "debug_toolbar.panels.redirects.RedirectsPanel",
Sli's avatar
Sli committed
653
    ]
Sli's avatar
Sli committed
654
    SASS_INCLUDE_FOLDERS = ["core/static/"]
655

Sli's avatar
Sli committed
656
if "test" in sys.argv:
657
    CAPTCHA_TEST_MODE = True
Sli's avatar
Sli committed
658 659 660 661

if SENTRY_DSN:
    # Connection to sentry
    sentry_sdk.init(dsn=SENTRY_DSN, integrations=[DjangoIntegration()])