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",
Skia's avatar
Skia committed
155
                "ProductType": "counter.models.ProductType",
Skia's avatar
Skia committed
156
                "timezone": "django.utils.timezone",
Skia's avatar
Skia committed
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 283 284
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
285
SITH_MAIN_CLUB = {
Sli's avatar
Sli committed
286 287 288
    "name": "AE",
    "unix_name": "ae",
    "address": "6 Boulevard Anatole France, 90000 Belfort",
Krophil's avatar
Krophil committed
289
}
290 291 292

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

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

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

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

312 313 314
# Used to determine the valid promos
SITH_SCHOOL_START_YEAR = 1999

Skia's avatar
Skia committed
315
SITH_GROUP_ROOT_ID = 1
Skia's avatar
Skia committed
316
SITH_GROUP_PUBLIC_ID = 2
317 318 319 320 321 322 323 324 325 326
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
327
SITH_GROUP_PEDAGOGY_ADMIN_ID = 13
328

Skia's avatar
Skia committed
329

Sli's avatar
Sli committed
330 331 332 333
SITH_CLUB_REFOUND_ID = 89
SITH_COUNTER_REFOUND_ID = 38
SITH_PRODUCT_REFOUND_ID = 5

334 335 336
# Pages
SITH_CORE_PAGE_SYNTAX = "Aide_sur_la_syntaxe"

Skia's avatar
Skia committed
337 338 339
# Forum

SITH_FORUM_PAGE_LENGTH = 30
Sli's avatar
Sli committed
340

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

Krophil's avatar
Krophil committed
345 346
SITH_BOARD_SUFFIX = "-bureau"
SITH_MEMBER_SUFFIX = "-membres"
Skia's avatar
Skia committed
347

Sli's avatar
Sli committed
348 349 350
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
351

Skia's avatar
Skia committed
352
SITH_PROFILE_DEPARTMENTS = [
Krophil's avatar
Krophil committed
353 354 355 356 357 358 359 360 361 362 363 364 365 366
    ("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
367

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

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

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

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

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

398
SITH_COUNTER_BANK = [
Sli's avatar
Sli committed
399 400 401 402 403 404 405 406 407 408
    ("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
409
]
410

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

SITH_PEDAGOGY_UV_SEMESTER = [
    ("CLOSED", _("Closed")),
    ("AUTUMN", _("Autumn")),
    ("SPRING", _("Spring")),
Sli's avatar
Sli committed
427
    ("AUTUMN_AND_SPRING", _("Autumn and spring")),
428 429 430 431 432 433 434 435 436
]

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

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

tleb's avatar
tleb committed
448
SITH_PEDAGOGY_UTBM_API = "https://extranet1.utbm.fr/gpedago/api/guide"
449

Sli's avatar
Sli committed
450
SITH_ECOCUP_CONS = 1152
Sli's avatar
Sli committed
451

Sli's avatar
Sli committed
452
SITH_ECOCUP_DECO = 1151
Sli's avatar
Sli committed
453

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

Sli's avatar
Sli committed
457 458 459
# Defines pagination for cash summary
SITH_COUNTER_CASH_SUMMARY_LENGTH = 50

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

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

Sli's avatar
Sli committed
468
SITH_CAN_CREATE_SUBSCRIPTIONS = [1]
469

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

Skia's avatar
Skia committed
473 474
# Subscription durations are in semestres
# Be careful, modifying this parameter will need a migration to be applied
Skia's avatar
Skia committed
475
SITH_SUBSCRIPTIONS = {
Sli's avatar
Sli committed
476 477 478 479 480 481
    "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
482
    },
Sli's avatar
Sli committed
483 484 485 486 487 488 489 490 491 492 493 494
    "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
495
    },
Sli's avatar
Sli committed
496 497 498 499 500 501
    "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
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 528 529
    "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
530
    # To be completed....
Skia's avatar
Skia committed
531 532
}

Sli's avatar
Sli committed
533 534 535
SITH_CLUB_ROLES = {}

SITH_CLUB_ROLES_ID = {
Sli's avatar
Sli committed
536 537 538 539 540 541 542 543 544
    "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
545 546
}

Sli's avatar
Sli committed
547
SITH_CLUB_ROLES = {
Sli's avatar
Sli committed
548 549 550 551 552 553 554 555 556
    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
557
}
Skia's avatar
Skia committed
558 559 560

# 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
561
SITH_MAXIMUM_FREE_ROLE = 1
Skia's avatar
Skia committed
562 563

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

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

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

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

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

Skia's avatar
Skia committed
591
SITH_NOTIFICATIONS = [
Sli's avatar
Sli committed
592 593
    ("POSTER_MODERATION", _("A new poster needs to be moderated")),
    ("MAILING_MODERATION", _("A new mailing list needs to be moderated")),
594 595 596 597
    (
        "PEDAGOGY_MODERATION",
        _("A new pedagogy comment has been signaled for moderation"),
    ),
Sli's avatar
Sli committed
598 599 600 601 602 603 604
    ("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
605
]
Skia's avatar
Skia committed
606

607 608 609 610
# 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
611 612
    "NEWS_MODERATION": "com.models.news_notification_callback",
    "SAS_MODERATION": "sas.models.sas_notification_callback",
613 614
}

Skia's avatar
Skia committed
615
SITH_QUICK_NOTIF = {
Sli's avatar
Sli committed
616 617 618 619 620
    "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
621
}
Skia's avatar
Skia committed
622

Sli's avatar
Sli committed
623 624
# Mailing related settings

Sli's avatar
Sli committed
625 626
SITH_MAILING_DOMAIN = "utbm.fr"
SITH_MAILING_FETCH_KEY = "IloveMails"
Sli's avatar
Sli committed
627

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

Sli's avatar
Sli committed
630 631
SENTRY_DSN = ""

Skia's avatar
Skia committed
632 633
try:
    from .settings_custom import *
Sli's avatar
Sli committed
634

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

if DEBUG:
    INSTALLED_APPS += ("debug_toolbar",)
641
    MIDDLEWARE = ("debug_toolbar.middleware.DebugToolbarMiddleware",) + MIDDLEWARE
Sli's avatar
Sli committed
642
    DEBUG_TOOLBAR_PANELS = [
Sli's avatar
Sli committed
643 644 645 646 647 648 649 650 651 652 653 654
        "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
655
    ]
Sli's avatar
Sli committed
656
    SASS_INCLUDE_FOLDERS = ["core/static/"]
657

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

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