Compare commits

...

20 Commits

Author SHA1 Message Date
Alexandre Iooss 9a52c81bff Simplify NGINX examples 2020-08-09 20:33:48 +02:00
Alexandre Iooss 48d3e8960a Do not cover virtualenv and migrations 2020-08-09 19:54:31 +02:00
Alexandre Iooss f6dfbb0b6c Fix amount of \ in apps/activity/views.py 2020-08-09 19:49:11 +02:00
Alexandre Iooss c6e3a57801 Reorder import in apps/treasury/admin.py 2020-08-09 19:43:21 +02:00
Alexandre Iooss 40b826a375 Fix hanging indent in apps/note/tables.py 2020-08-09 19:42:09 +02:00
Alexandre Iooss f0089d0bc5 Remove unused django.template.loader.render_to_string import 2020-08-09 19:39:17 +02:00
Alexandre Iooss 5e75a56eda missing whitespace after ':' in apps/wei/forms/registration.py 2020-08-09 19:38:23 +02:00
Alexandre Iooss d73f7c31a1 Define BASE_DIR in development.py 2020-08-09 19:36:11 +02:00
Alexandre Iooss 31f4105c9a Do not test against Py3.6 2020-08-09 19:34:01 +02:00
Alexandre Iooss e9ae8531b8 Fix date-picker.html import 2020-08-09 19:16:11 +02:00
Alexandre Iooss 7b40ee1ca4 Reorder templates 2020-08-09 19:06:57 +02:00
Alexandre Iooss 53b496546d Add django-bootstrap-datepicker-plus and django-colorfield, move statics 2020-08-09 18:54:20 +02:00
Alexandre Iooss 8c1cf754ed Revert to NOTE_URL 2020-08-09 18:39:17 +02:00
Alexandre Iooss efe833cec3 Merge production settings in base settings 2020-08-09 18:34:51 +02:00
Alexandre Iooss ccfc37d226 Reorder base Django settings and read env vars 2020-08-09 17:52:19 +02:00
Yohann D'ANELLO 764eaafb95 Emails are unique. Translate mail foooters. Closes #55 #56 2020-08-09 16:38:37 +02:00
Yohann D'ANELLO 5846f03220 🐛 Last report date is a datetime, not a date 2020-08-09 15:53:50 +02:00
Yohann D'ANELLO 52e8b46aa2 🐛 Last report date is a datetime, not a date 2020-08-09 15:50:51 +02:00
Yohann D'ANELLO 29f84ea007 Remove test code 2020-08-09 15:42:07 +02:00
Yohann D'ANELLO 49bda926c6 Disable turbolinks for pages that require custom JS, like calendars or autocomplete fields 2020-08-09 15:31:38 +02:00
336 changed files with 519 additions and 37427 deletions

View File

@ -1,6 +1,6 @@
DJANGO_APP_STAGE=prod
# Only used in dev mode, change to "postgresql" if you want to use PostgreSQL in dev
DJANGO_DEV_STORE_METHOD=sqllite
DJANGO_DEV_STORE_METHOD=sqlite
DJANGO_DB_HOST=localhost
DJANGO_DB_NAME=note_db
DJANGO_DB_USER=note
@ -10,11 +10,15 @@ DJANGO_SECRET_KEY=CHANGE_ME
DJANGO_SETTINGS_MODULE=note_kfet.settings
CONTACT_EMAIL=tresorerie.bde@localhost
NOTE_URL=localhost
DOMAIN=localhost
# Config for mails. Only used in production
NOTE_MAIL=notekfet@localhost
EMAIL_HOST=smtp.localhost
EMAIL_PORT=465
EMAIL_PORT=25
EMAIL_USER=notekfet@localhost
EMAIL_PASSWORD=CHANGE_ME
# Wiki configuration
WIKI_USER=NoteKfet2020
WIKI_PASSWORD=

1
.gitignore vendored
View File

@ -40,6 +40,7 @@ secrets.py
map.json
*.log
backups/
static/
media/
# Virtualenv

View File

@ -7,11 +7,6 @@ stages:
before_script:
- pip install tox
py36-django22:
image: python:3.6
stage: test
script: tox -e py36-django22
py37-django22:
image: python:3.7
stage: test

View File

@ -107,7 +107,7 @@ On supposera pour la suite que vous utilisez Debian/Ubuntu sur un serveur tout n
et on renseigne des secrets et des paramètres :
DJANGO_APP_STAGE=dev # ou "prod"
DJANGO_DEV_STORE_METHOD=sqllite # ou "postgres"
DJANGO_DEV_STORE_METHOD=sqlite # ou "postgres"
DJANGO_DB_HOST=localhost
DJANGO_DB_NAME=note_db
DJANGO_DB_USER=note
@ -115,13 +115,13 @@ On supposera pour la suite que vous utilisez Debian/Ubuntu sur un serveur tout n
DJANGO_DB_PORT=
DJANGO_SECRET_KEY=CHANGE_ME
DJANGO_SETTINGS_MODULE="note_kfet.settings
NOTE_URL=localhost # URL où accéder à la note
DOMAIN=localhost # note.example.com
CONTACT_EMAIL=tresorerie.bde@localhost
NOTE_URL=localhost # URL où accéder à la note
# Le reste n'est utile qu'en production, pour configurer l'envoi des mails
NOTE_MAIL=notekfet@localhost
EMAIL_HOST=smtp.localhost
EMAIL_PORT=465
EMAIL_PORT=25
EMAIL_USER=notekfet@localhost
EMAIL_PASSWORD=CHANGE_ME
WIKI_USER=NoteKfet2020

View File

@ -68,10 +68,10 @@
<a class="btn btn-success btn-sm my-1" id="validate_activity"> {% if activity.valid %}{% trans "invalidate"|capfirst %}{% else %}{% trans "validate"|capfirst %}{% endif %}</a>
{% endif %}
{% if ".change_"|has_perm:activity %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'activity:activity_update' pk=activity.pk %}"> {% trans "edit"|capfirst %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'activity:activity_update' pk=activity.pk %}" data-turbolinks="false"> {% trans "edit"|capfirst %}</a>
{% endif %}
{% if activity.activity_type.can_invite and not activity_started %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'activity:activity_invite' pk=activity.pk %}"> {% trans "Invite" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'activity:activity_invite' pk=activity.pk %}" data-turbolinks="false"> {% trans "Invite" %}</a>
{% endif %}
{% endif %}
</div>

View File

@ -19,7 +19,7 @@
</div>
{% endif %}
<a class="btn btn-primary" href="{% url 'activity:activity_create' %}">{% trans 'New activity' %}</a>
<a class="btn btn-primary" href="{% url 'activity:activity_create' %}" data-turbolinks="false">{% trans 'New activity' %}</a>
<hr>

View File

@ -151,14 +151,21 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
first_name=F("note__noteuser__user__first_name"),
username=F("note__noteuser__user__username"),
note_name=F("name"),
balance=F("note__balance"))\
.filter(note__noteuser__isnull=False)\
.filter(
balance=F("note__balance"))
# Keep only users that have a note
note_qs = note_qs.filter(note__noteuser__isnull=False)
# Keep only members
note_qs = note_qs.filter(
note__noteuser__user__memberships__club=activity.attendees_club,
note__noteuser__user__memberships__date_start__lte=timezone.now(),
note__noteuser__user__memberships__date_end__gte=timezone.now(),
)\
.filter(PermissionBackend.filter_queryset(self.request.user, Alias, "view"))
)
# Filter with permission backend
note_qs = note_qs.filter(PermissionBackend.filter_queryset(self.request.user, Alias, "view"))
if pattern:
note_qs = note_qs.filter(
Q(note__noteuser__user__first_name__regex=pattern)

View File

@ -50,7 +50,7 @@ class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
exclude = ('user', )
exclude = ('user', 'email_confirmed', 'registration_valid', )
class ClubForm(forms.ModelForm):

View File

@ -148,7 +148,7 @@ class Profile(models.Model):
return str(self.user)
def send_email_validation_link(self):
subject = "[Note Kfet]" + str(_("Activate your Note Kfet account"))
subject = "[Note Kfet] " + str(_("Activate your Note Kfet account"))
message = loader.render_to_string('registration/mails/email_validation_email.txt',
{
'user': self.user,

View File

@ -61,10 +61,10 @@
{% if not club.weiclub %}
<div class="card-footer text-center">
{% if can_add_members %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'member:club_add_member' club_pk=club.pk %}"> {% trans "Add member" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'member:club_add_member' club_pk=club.pk %}" data-turbolinks="false"> {% trans "Add member" %}</a>
{% endif %}
{% if ".change_"|has_perm:club %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'member:club_update' pk=club.pk %}"> {% trans "Edit" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'member:club_update' pk=club.pk %}" data-turbolinks="false"> {% trans "Edit" %}</a>
{% endif %}
{% url 'member:club_detail' club.pk as club_detail_url %}
{%if request.path_info != club_detail_url %}

View File

@ -6,7 +6,7 @@
<div class="col-md-10 text-center">
<input class="form-control mx-auto w-25" type="text" id="search_field"/>
<hr>
<a class="btn btn-primary text-center my-4" href="{% url 'member:club_create' %}">{% trans "Create club" %}</a>
<a class="btn btn-primary text-center my-4" href="{% url 'member:club_create' %}" data-turbolinks="false">{% trans "Create club" %}</a>
</div>
</div>
<div class="row justify-content-center">

View File

@ -218,26 +218,18 @@ class Transaction(PolymorphicModel):
# When source == destination, no money is transferred and no transaction is created
return
self.log("Saving")
# We save first the transaction, in case of the user has no right to transfer money
super().save(*args, **kwargs)
self.log("Saved")
# Save notes
self.source.refresh_from_db()
self.source.balance += diff_source
self.source._force_save = True
self.source.save()
self.log("Source saved")
self.destination.refresh_from_db()
self.destination.balance += diff_dest
self.destination._force_save = True
self.destination.save()
self.log("Destination saved")
def log(self, msg):
with open("/tmp/log", "a") as f:
f.write(msg + "\n")
def delete(self, **kwargs):
"""

View File

@ -153,13 +153,20 @@ class ButtonTable(tables.Table):
model = TransactionTemplate
exclude = ('id',)
edit = tables.LinkColumn('note:template_update',
edit = tables.LinkColumn(
'note:template_update',
args=[A('pk')],
attrs={'td': {'class': 'col-sm-1'},
'a': {'class': 'btn btn-sm btn-primary'}},
attrs={
'td': {'class': 'col-sm-1'},
'a': {
'class': 'btn btn-sm btn-primary',
'data-turbolinks': 'false',
}
},
text=_('edit'),
accessor='pk',
verbose_name=_("Edit"),)
verbose_name=_("Edit"),
)
delete_col = tables.TemplateColumn(template_code=DELETE_TEMPLATE,
extra_context={"delete_trans": _('delete')},

View File

@ -1,4 +1,5 @@
{% load pretty_money %}
{% load i18n %}
<!DOCTYPE html>
<html lang="fr">
@ -38,7 +39,7 @@
--
<p>
Le BDE<br>
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}
</p>
</body>
</html>

View File

@ -1,4 +1,5 @@
{% load pretty_money %}
{% load i18n %}
Bonjour {{ note.user.first_name }} {{ note.user.last_name }},
@ -20,4 +21,4 @@ virement bancaire.
--
Le BDE
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}

View File

@ -1,4 +1,5 @@
{% load pretty_money %}
{% load i18n %}
<!DOCTYPE html>
<html lang="fr">
@ -35,7 +36,7 @@
--
<p>
Le BDE<br>
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}
</p>
</body>
</html>

View File

@ -1,4 +1,5 @@
{% load pretty_money %}
{% load i18n %}
Nom | Prénom | Pseudo | Email | Solde | Durée
---------------------+------------+-----------------+-----------------------------------+----------+-----------
@ -9,4 +10,4 @@
--
Le BDE
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}

View File

@ -1,5 +1,6 @@
{% load pretty_money %}
{% load render_table from django_tables2 %}
{% load i18n %}
<!DOCTYPE html>
<html lang="fr">
@ -50,7 +51,7 @@
--
<p>
Le BDE<br>
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}
</p>
</body>
</html>

View File

@ -7,7 +7,7 @@
<div class="col-md-10 text-center">
<input class="form-control mx-auto w-25" type="text" id="search_field" placeholder="{% trans "Name of the button..." %}">
<hr>
<a class="btn btn-primary text-center my-1" href="{% url 'note:template_create' %}">{% trans "New button" %}</a>
<a class="btn btn-primary text-center my-1" href="{% url 'note:template_create' %}" data-turbolinks="false">{% trans "New button" %}</a>
</div>
</div>
<div class="row justify-content-center">

View File

@ -65,8 +65,6 @@ class InstancedPermission:
obj._force_delete = True
Model.delete(obj)
with open("/tmp/log", "w") as f:
f.write(str(obj) + ", " + str(obj.pk) + ", " + str(self.model.model_class().objects.filter(pk=0).exists()))
return ret
if permission_type == self.type:

View File

@ -28,6 +28,12 @@ class SignUpForm(UserCreationForm):
self.add_error("username", _("An alias with a similar name already exists."))
return value
def clean_email(self):
email = self.cleaned_data["email"]
if User.objects.filter(email=email).exists():
self.add_error("email", _("This email address is already used."))
return email
class Meta:
model = User
fields = ('first_name', 'last_name', 'username', 'email', )

View File

@ -36,6 +36,6 @@
--
<p>
{% trans "The Note Kfet team." %}
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "The Note Kfet team." %}<br>
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}
</p>

View File

@ -13,4 +13,4 @@ https://{{ domain }}{% url 'registration:email_validation' uidb64=uid token=toke
{% trans "Thanks" %},
{% trans "The Note Kfet team." %}
Mail généré par la Note Kfet le {% now "j F Y à H:i:s" %}
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}

@ -1 +1 @@
Subproject commit 53098f8adcf085fdb0e8ff058a3035bd2d4977a3
Subproject commit 2495128755f4d1fd803bfc3b641db8074fa65310

View File

@ -3,8 +3,8 @@
from django.contrib import admin
from note_kfet.admin import admin_site
from .forms import ProductForm
from .forms import ProductForm
from .models import RemittanceType, Remittance, SogeCredit, Invoice, Product

View File

@ -13,7 +13,6 @@ from django.db.models import Q
from django.forms import Form
from django.http import HttpResponse
from django.shortcuts import redirect
from django.template.loader import render_to_string
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, UpdateView, DetailView
@ -110,7 +109,6 @@ class InvoiceUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
for field_name in f.fields:
f.fields[field_name].disabled = True
return context
def form_valid(self, form):

View File

@ -39,8 +39,8 @@ class WEIRegistrationForm(forms.ModelForm):
'placeholder': 'Nom ...',
},
),
"birth_date": DatePickerInput(options={'defaultDate':'2000-01-01',
'minDate':'1900-01-01',
"birth_date": DatePickerInput(options={'defaultDate': '2000-01-01',
'minDate': '1900-01-01',
'maxDate': '2100-01-01'}),
}

View File

@ -47,7 +47,8 @@ class WEIRegistrationTable(tables.Table):
text=_("Edit"),
attrs={
'a': {
'class': 'btn btn-warning'
'class': 'btn btn-warning',
'data-turbolinks': 'false',
}
}
)

View File

@ -12,8 +12,8 @@
</div>
<div class="card-footer text-center">
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:update_bus' pk=object.pk %}">{% trans "Edit" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:add_team' pk=object.pk %}">{% trans "Add team" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:update_bus' pk=object.pk %}" data-turbolinks="false">{% trans "Edit" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:add_team' pk=object.pk %}" data-turbolinks="false">{% trans "Add team" %}</a>
</div>
</div>

View File

@ -12,8 +12,8 @@
</div>
<div class="card-footer text-center">
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:update_bus' pk=bus.pk %}">{% trans "Edit" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:add_team' pk=bus.pk %}">{% trans "Add team" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:update_bus' pk=bus.pk %}" data-turbolinks="false">{% trans "Edit" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:add_team' pk=bus.pk %}" data-turbolinks="false">{% trans "Add team" %}</a>
</div>
</div>

View File

@ -59,16 +59,16 @@
{% endif %}
{% if club.is_current_wei %}
{% if can_add_first_year_member %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:wei_register_1A' wei_pk=club.pk %}"> {% trans "Register 1A" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:wei_register_1A' wei_pk=club.pk %}" data-turbolinks="false"> {% trans "Register 1A" %}</a>
{% endif %}
{% if can_add_any_member %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:wei_register_2A' wei_pk=club.pk %}"> {% trans "Register 2A+" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:wei_register_2A' wei_pk=club.pk %}" data-turbolinks="false"> {% trans "Register 2A+" %}</a>
{% endif %}
{% if "wei.change_"|has_perm:club %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:wei_update' pk=club.pk %}"> {% trans "Edit" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:wei_update' pk=club.pk %}" data-turbolinks="false"> {% trans "Edit" %}</a>
{% endif %}
{% if can_add_bus %}
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:add_bus' pk=club.pk %}"> {% trans "Add bus" %}</a>
<a class="btn btn-primary btn-sm my-1" href="{% url 'wei:add_bus' pk=club.pk %}" data-turbolinks="false"> {% trans "Add bus" %}</a>
{% endif %}
{% url 'wei:wei_detail' club.pk as club_detail_url %}
{%if request.path_info != club_detail_url %}

View File

@ -13,11 +13,11 @@
<div class="card-footer text-center">
{% if not my_registration %}
{% if not not_first_year %}
<a href="{% url "wei:wei_register_1A_myself" wei_pk=club.pk %}"><button class="btn btn-success">{% trans "Register to the WEI! 1A" %}</button></a>
<a href="{% url "wei:wei_register_1A_myself" wei_pk=club.pk %}" data-turbolinks="false"><button class="btn btn-success">{% trans "Register to the WEI! 1A" %}</button></a>
{% endif %}
<a href="{% url "wei:wei_register_2A_myself" wei_pk=club.pk %}"><button class="btn btn-success">{% trans "Register to the WEI! 2A+" %}</button></a>
<a href="{% url "wei:wei_register_2A_myself" wei_pk=club.pk %}" data-turbolinks="false"><button class="btn btn-success">{% trans "Register to the WEI! 2A+" %}</button></a>
{% else %}
<a href="{% url "wei:wei_update_registration" pk=my_registration.pk %}"><button class="btn btn-warning">{% trans "Update my registration" %}</button></a>
<a href="{% url "wei:wei_update_registration" pk=my_registration.pk %}" data-turbolinks="false"><button class="btn btn-warning">{% trans "Update my registration" %}</button></a>
{% endif %}
</div>
{% endif %}

View File

@ -125,7 +125,7 @@
</dl>
</div>
<div class="card-footer text-center">
<a class="btn btn-primary btn-sm" href="{% url 'wei:wei_update_registration' registration.pk %}">{% trans 'Update registration' %}</a>
<a class="btn btn-primary btn-sm" href="{% url 'wei:wei_update_registration' registration.pk %}" data-turbolinks="false">{% trans 'Update registration' %}</a>
{% if "auth.change_user"|has_perm:registration.user %}
<a class="btn btn-primary btn-sm" href="{% url 'member:user_update_profile' registration.user.pk %}">{% trans 'Update Profile' %}</a>
{% endif %}

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 19:53+0200\n"
"POT-Creation-Date: 2020-08-09 16:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -44,9 +44,9 @@ msgid "You can't invite more than 3 people to this activity."
msgstr ""
#: apps/activity/models.py:27 apps/activity/models.py:62
#: apps/member/models.py:172 apps/note/models/notes.py:212
#: apps/member/models.py:175 apps/note/models/notes.py:212
#: apps/note/models/transactions.py:25 apps/note/models/transactions.py:45
#: apps/note/models/transactions.py:295 apps/permission/models.py:331
#: apps/note/models/transactions.py:286 apps/permission/models.py:329
#: apps/wei/models.py:66 apps/wei/models.py:118
#: templates/member/club_info.html:13 templates/member/profile_info.html:14
#: templates/registration/future_profile_detail.html:16
@ -78,8 +78,8 @@ msgstr ""
msgid "activity types"
msgstr ""
#: apps/activity/models.py:67 apps/note/models/transactions.py:81
#: apps/permission/models.py:112 apps/permission/models.py:191
#: apps/activity/models.py:67 apps/note/models/transactions.py:80
#: apps/permission/models.py:110 apps/permission/models.py:189
#: apps/wei/models.py:72 apps/wei/models.py:129
#: templates/activity/activity_info.html:19
msgid "description"
@ -90,12 +90,12 @@ msgid "location"
msgstr ""
#: apps/activity/models.py:81 apps/note/models/notes.py:188
#: apps/note/models/transactions.py:66 apps/permission/models.py:166
#: apps/note/models/transactions.py:65 apps/permission/models.py:164
#: templates/activity/activity_info.html:22
msgid "type"
msgstr ""
#: apps/activity/models.py:87 apps/logs/models.py:22 apps/member/models.py:277
#: apps/activity/models.py:87 apps/logs/models.py:22 apps/member/models.py:280
#: apps/note/models/notes.py:126 apps/treasury/models.py:266
#: apps/wei/models.py:160 templates/treasury/sogecredit_detail.html:14
#: templates/wei/survey.html:16
@ -118,7 +118,7 @@ msgstr ""
msgid "end date"
msgstr ""
#: apps/activity/models.py:114 apps/note/models/transactions.py:146
#: apps/activity/models.py:114 apps/note/models/transactions.py:145
#: templates/activity/activity_info.html:50
msgid "valid"
msgstr ""
@ -199,14 +199,14 @@ msgid "Type"
msgstr ""
#: apps/activity/tables.py:81 apps/member/forms.py:106
#: apps/registration/forms.py:70 apps/treasury/forms.py:135
#: apps/wei/forms/registration.py:94
#: apps/registration/forms.py:76 apps/treasury/forms.py:135
#: apps/wei/forms/registration.py:96
msgid "Last name"
msgstr ""
#: apps/activity/tables.py:83 apps/member/forms.py:111
#: apps/registration/forms.py:75 apps/treasury/forms.py:137
#: apps/wei/forms/registration.py:99 templates/note/transaction_form.html:131
#: apps/registration/forms.py:81 apps/treasury/forms.py:137
#: apps/wei/forms/registration.py:101 templates/note/transaction_form.html:131
msgid "First name"
msgstr ""
@ -254,7 +254,7 @@ msgstr ""
msgid "IP Address"
msgstr ""
#: apps/logs/models.py:36 apps/permission/models.py:136
#: apps/logs/models.py:36 apps/permission/models.py:134
msgid "model"
msgstr ""
@ -274,14 +274,14 @@ msgstr ""
msgid "create"
msgstr ""
#: apps/logs/models.py:62 apps/note/tables.py:160
#: apps/logs/models.py:62 apps/note/tables.py:163
#: templates/activity/activity_info.html:71
msgid "edit"
msgstr ""
#: apps/logs/models.py:63 apps/note/tables.py:137 apps/note/tables.py:165
#: apps/permission/models.py:129 apps/treasury/tables.py:38
#: apps/wei/tables.py:73
#: apps/logs/models.py:63 apps/note/tables.py:137 apps/note/tables.py:168
#: apps/permission/models.py:127 apps/treasury/tables.py:38
#: apps/wei/tables.py:74
msgid "delete"
msgstr ""
@ -305,25 +305,25 @@ msgstr ""
msgid "changelogs"
msgstr ""
#: apps/member/admin.py:52 apps/member/models.py:199
#: apps/member/admin.py:52 apps/member/models.py:202
#: templates/member/club_info.html:41
msgid "membership fee (paid students)"
msgstr ""
#: apps/member/admin.py:53 apps/member/models.py:204
#: apps/member/admin.py:53 apps/member/models.py:207
#: templates/member/club_info.html:44
msgid "membership fee (unpaid students)"
msgstr ""
#: apps/member/admin.py:67 apps/member/models.py:288
#: apps/member/admin.py:67 apps/member/models.py:291
msgid "roles"
msgstr ""
#: apps/member/admin.py:68 apps/member/models.py:302
#: apps/member/admin.py:68 apps/member/models.py:305
msgid "fee"
msgstr ""
#: apps/member/apps.py:14 apps/wei/tables.py:179 apps/wei/tables.py:210
#: apps/member/apps.py:14 apps/wei/tables.py:180 apps/wei/tables.py:211
msgid "member"
msgstr ""
@ -340,21 +340,21 @@ msgstr ""
msgid "An alias with a similar name already exists."
msgstr ""
#: apps/member/forms.py:85 apps/registration/forms.py:50
#: apps/member/forms.py:85 apps/registration/forms.py:56
msgid "Inscription paid by Société Générale"
msgstr ""
#: apps/member/forms.py:87 apps/registration/forms.py:52
#: apps/member/forms.py:87 apps/registration/forms.py:58
msgid "Check this case is the Société Générale paid the inscription."
msgstr ""
#: apps/member/forms.py:92 apps/registration/forms.py:57
#: apps/wei/forms/registration.py:81
#: apps/member/forms.py:92 apps/registration/forms.py:63
#: apps/wei/forms/registration.py:83
msgid "Credit type"
msgstr ""
#: apps/member/forms.py:93 apps/registration/forms.py:58
#: apps/wei/forms/registration.py:82
#: apps/member/forms.py:93 apps/registration/forms.py:64
#: apps/wei/forms/registration.py:84
msgid "No credit"
msgstr ""
@ -362,13 +362,13 @@ msgstr ""
msgid "You can credit the note of the user."
msgstr ""
#: apps/member/forms.py:99 apps/registration/forms.py:63
#: apps/wei/forms/registration.py:87
#: apps/member/forms.py:99 apps/registration/forms.py:69
#: apps/wei/forms/registration.py:89
msgid "Credit amount"
msgstr ""
#: apps/member/forms.py:116 apps/registration/forms.py:80
#: apps/treasury/forms.py:139 apps/wei/forms/registration.py:104
#: apps/member/forms.py:116 apps/registration/forms.py:86
#: apps/treasury/forms.py:139 apps/wei/forms/registration.py:106
#: templates/note/transaction_form.html:137
msgid "Bank"
msgstr ""
@ -509,92 +509,92 @@ msgstr ""
msgid "user profile"
msgstr ""
#: apps/member/models.py:148
#: apps/member/models.py:151
msgid "Activate your Note Kfet account"
msgstr ""
#: apps/member/models.py:177 templates/member/club_info.html:57
#: apps/member/models.py:180 templates/member/club_info.html:57
#: templates/registration/future_profile_detail.html:22
#: templates/wei/weiclub_info.html:52 templates/wei/weimembership_form.html:24
msgid "email"
msgstr ""
#: apps/member/models.py:184
#: apps/member/models.py:187
msgid "parent club"
msgstr ""
#: apps/member/models.py:193
#: apps/member/models.py:196
msgid "require memberships"
msgstr ""
#: apps/member/models.py:194
#: apps/member/models.py:197
msgid "Uncheck if this club don't require memberships."
msgstr ""
#: apps/member/models.py:210 templates/member/club_info.html:33
#: apps/member/models.py:213 templates/member/club_info.html:33
msgid "membership duration"
msgstr ""
#: apps/member/models.py:211
#: apps/member/models.py:214
msgid "The longest time (in days) a membership can last (NULL = infinite)."
msgstr ""
#: apps/member/models.py:218 templates/member/club_info.html:23
#: apps/member/models.py:221 templates/member/club_info.html:23
msgid "membership start"
msgstr ""
#: apps/member/models.py:219
#: apps/member/models.py:222
msgid "Date from which the members can renew their membership."
msgstr ""
#: apps/member/models.py:225 templates/member/club_info.html:28
#: apps/member/models.py:228 templates/member/club_info.html:28
msgid "membership end"
msgstr ""
#: apps/member/models.py:226
#: apps/member/models.py:229
msgid "Maximal date of a membership, after which members must renew it."
msgstr ""
#: apps/member/models.py:258 apps/member/models.py:283
#: apps/member/models.py:261 apps/member/models.py:286
#: apps/note/models/notes.py:163
msgid "club"
msgstr ""
#: apps/member/models.py:259
#: apps/member/models.py:262
msgid "clubs"
msgstr ""
#: apps/member/models.py:293
#: apps/member/models.py:296
msgid "membership starts on"
msgstr ""
#: apps/member/models.py:297
#: apps/member/models.py:300
msgid "membership ends on"
msgstr ""
#: apps/member/models.py:348
#: apps/member/models.py:351
#, python-brace-format
msgid "The role {role} does not apply to the club {club}."
msgstr ""
#: apps/member/models.py:359 apps/member/views.py:592
#: apps/member/models.py:362 apps/member/views.py:592
msgid "User is already a member of the club"
msgstr ""
#: apps/member/models.py:406
#: apps/member/models.py:409
msgid "User is not a member of the parent club"
msgstr ""
#: apps/member/models.py:459
#: apps/member/models.py:462
#, python-brace-format
msgid "Membership of {user} for the club {club}"
msgstr ""
#: apps/member/models.py:462
#: apps/member/models.py:465
msgid "membership"
msgstr ""
#: apps/member/models.py:463
#: apps/member/models.py:466
msgid "memberships"
msgstr ""
@ -680,17 +680,17 @@ msgstr ""
msgid "Members of the club"
msgstr ""
#: apps/note/admin.py:133 apps/note/models/transactions.py:106
#: apps/note/admin.py:133 apps/note/models/transactions.py:105
msgid "source"
msgstr ""
#: apps/note/admin.py:141 apps/note/admin.py:191
#: apps/note/models/transactions.py:55 apps/note/models/transactions.py:119
#: apps/note/models/transactions.py:55 apps/note/models/transactions.py:118
msgid "destination"
msgstr ""
#: apps/note/admin.py:196 apps/note/models/transactions.py:59
#: apps/note/models/transactions.py:137
#: apps/note/models/transactions.py:136
msgid "amount"
msgstr ""
@ -764,7 +764,7 @@ msgstr ""
msgid "display image"
msgstr ""
#: apps/note/models/notes.py:55 apps/note/models/transactions.py:129
#: apps/note/models/notes.py:55 apps/note/models/transactions.py:128
msgid "created at"
msgstr ""
@ -847,115 +847,115 @@ msgstr ""
msgid "A template with this name already exist"
msgstr ""
#: apps/note/models/transactions.py:72
#: apps/note/models/transactions.py:71
msgid "display"
msgstr ""
#: apps/note/models/transactions.py:77
#: apps/note/models/transactions.py:76
msgid "highlighted"
msgstr ""
#: apps/note/models/transactions.py:87
#: apps/note/models/transactions.py:86
msgid "transaction template"
msgstr ""
#: apps/note/models/transactions.py:88
#: apps/note/models/transactions.py:87
msgid "transaction templates"
msgstr ""
#: apps/note/models/transactions.py:112 apps/note/models/transactions.py:125
#: apps/note/models/transactions.py:111 apps/note/models/transactions.py:124
#: apps/note/tables.py:35 apps/note/tables.py:44
msgid "used alias"
msgstr ""
#: apps/note/models/transactions.py:133
#: apps/note/models/transactions.py:132
msgid "quantity"
msgstr ""
#: apps/note/models/transactions.py:141
#: apps/note/models/transactions.py:140
msgid "reason"
msgstr ""
#: apps/note/models/transactions.py:151 apps/note/tables.py:112
#: apps/note/models/transactions.py:150 apps/note/tables.py:112
msgid "invalidity reason"
msgstr ""
#: apps/note/models/transactions.py:159
#: apps/note/models/transactions.py:158
msgid "transaction"
msgstr ""
#: apps/note/models/transactions.py:160
#: apps/note/models/transactions.py:159
#: templates/treasury/sogecredit_detail.html:22
msgid "transactions"
msgstr ""
#: apps/note/models/transactions.py:197
#: apps/note/models/transactions.py:192
msgid ""
"The note balances must be between - 21 474 836.47 € and 21 474 836.47 €."
msgstr ""
#: apps/note/models/transactions.py:212
#: apps/note/models/transactions.py:207
msgid ""
"The transaction can't be saved since the source note or the destination note "
"is not active."
msgstr ""
#: apps/note/models/transactions.py:257
#: apps/note/models/transactions.py:248
#: templates/activity/activity_entry.html:13 templates/base.html:99
#: templates/note/transaction_form.html:15
#: templates/note/transaction_form.html:145
msgid "Transfer"
msgstr ""
#: apps/note/models/transactions.py:281
#: apps/note/models/transactions.py:272
msgid "Template"
msgstr ""
#: apps/note/models/transactions.py:284
#: apps/note/models/transactions.py:275
msgid "recurrent transaction"
msgstr ""
#: apps/note/models/transactions.py:285
#: apps/note/models/transactions.py:276
msgid "recurrent transactions"
msgstr ""
#: apps/note/models/transactions.py:300
#: apps/note/models/transactions.py:291
msgid "first_name"
msgstr ""
#: apps/note/models/transactions.py:305
#: apps/note/models/transactions.py:296
msgid "bank"
msgstr ""
#: apps/note/models/transactions.py:311
#: apps/note/models/transactions.py:302
#: templates/activity/activity_entry.html:17
#: templates/note/transaction_form.html:20
msgid "Credit"
msgstr ""
#: apps/note/models/transactions.py:311 templates/note/transaction_form.html:25
#: apps/note/models/transactions.py:302 templates/note/transaction_form.html:25
msgid "Debit"
msgstr ""
#: apps/note/models/transactions.py:322
#: apps/note/models/transactions.py:313
msgid ""
"A special transaction is only possible between a Note associated to a "
"payment method and a User or a Club"
msgstr ""
#: apps/note/models/transactions.py:326
#: apps/note/models/transactions.py:317
msgid "Special transaction"
msgstr ""
#: apps/note/models/transactions.py:327
#: apps/note/models/transactions.py:318
msgid "Special transactions"
msgstr ""
#: apps/note/models/transactions.py:343 apps/note/models/transactions.py:348
#: apps/note/models/transactions.py:334 apps/note/models/transactions.py:339
msgid "membership transaction"
msgstr ""
#: apps/note/models/transactions.py:344 apps/treasury/models.py:272
#: apps/note/models/transactions.py:335 apps/treasury/models.py:272
msgid "membership transactions"
msgstr ""
@ -971,15 +971,15 @@ msgstr ""
msgid "No reason specified"
msgstr ""
#: apps/note/tables.py:139 apps/note/tables.py:167 apps/treasury/tables.py:39
#: apps/wei/tables.py:74 apps/wei/tables.py:100
#: apps/note/tables.py:139 apps/note/tables.py:170 apps/treasury/tables.py:39
#: apps/wei/tables.py:75 apps/wei/tables.py:101
#: templates/treasury/invoice_confirm_delete.html:28
#: templates/treasury/sogecredit_detail.html:59
#: templates/wei/weiregistration_confirm_delete.html:32
msgid "Delete"
msgstr ""
#: apps/note/tables.py:162 apps/wei/tables.py:46 apps/wei/tables.py:47
#: apps/note/tables.py:165 apps/wei/tables.py:46 apps/wei/tables.py:47
#: templates/member/club_info.html:67 templates/note/conso_form.html:130
#: templates/wei/bus_tables.html:15 templates/wei/busteam_tables.html:15
#: templates/wei/busteam_tables.html:33 templates/wei/weiclub_info.html:68
@ -1010,79 +1010,79 @@ msgstr ""
msgid "Search transactions"
msgstr ""
#: apps/permission/models.py:91
#: apps/permission/models.py:89
#, python-brace-format
msgid "Can {type} {model}.{field} in {query}"
msgstr ""
#: apps/permission/models.py:93
#: apps/permission/models.py:91
#, python-brace-format
msgid "Can {type} {model} in {query}"
msgstr ""
#: apps/permission/models.py:106
#: apps/permission/models.py:104
msgid "rank"
msgstr ""
#: apps/permission/models.py:119
#: apps/permission/models.py:117
msgid "permission mask"
msgstr ""
#: apps/permission/models.py:120
#: apps/permission/models.py:118
msgid "permission masks"
msgstr ""
#: apps/permission/models.py:126
#: apps/permission/models.py:124
msgid "add"
msgstr ""
#: apps/permission/models.py:127
#: apps/permission/models.py:125
msgid "view"
msgstr ""
#: apps/permission/models.py:128
#: apps/permission/models.py:126
msgid "change"
msgstr ""
#: apps/permission/models.py:160
#: apps/permission/models.py:158
msgid "query"
msgstr ""
#: apps/permission/models.py:173
#: apps/permission/models.py:171
msgid "mask"
msgstr ""
#: apps/permission/models.py:179
#: apps/permission/models.py:177
msgid "field"
msgstr ""
#: apps/permission/models.py:184
#: apps/permission/models.py:182
msgid ""
"Tells if the permission should be granted even if the membership of the user "
"is expired."
msgstr ""
#: apps/permission/models.py:185 templates/permission/all_rights.html:36
#: apps/permission/models.py:183 templates/permission/all_rights.html:36
msgid "permanent"
msgstr ""
#: apps/permission/models.py:196
#: apps/permission/models.py:194
msgid "permission"
msgstr ""
#: apps/permission/models.py:197 apps/permission/models.py:336
#: apps/permission/models.py:195 apps/permission/models.py:334
msgid "permissions"
msgstr ""
#: apps/permission/models.py:202
#: apps/permission/models.py:200
msgid "Specifying field applies only to view and change permission types."
msgstr ""
#: apps/permission/models.py:341
#: apps/permission/models.py:339
msgid "for club"
msgstr ""
#: apps/permission/models.py:351 apps/permission/models.py:352
#: apps/permission/models.py:349 apps/permission/models.py:350
msgid "role permissions"
msgstr ""
@ -1119,21 +1119,25 @@ msgstr ""
msgid "registration"
msgstr ""
#: apps/registration/forms.py:38
#: apps/registration/forms.py:34
msgid "This email address is already used."
msgstr ""
#: apps/registration/forms.py:44
msgid "Register to the WEI"
msgstr ""
#: apps/registration/forms.py:40
#: apps/registration/forms.py:46
msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you "
"will be able to register later, after validating your account in the Kfet."
msgstr ""
#: apps/registration/forms.py:85
#: apps/registration/forms.py:91
msgid "Join BDE Club"
msgstr ""
#: apps/registration/forms.py:92
#: apps/registration/forms.py:98
msgid "Join Kfet Club"
msgstr ""
@ -1446,41 +1450,41 @@ msgstr ""
msgid "WEI"
msgstr ""
#: apps/wei/forms/registration.py:49 apps/wei/models.py:113
#: apps/wei/forms/registration.py:51 apps/wei/models.py:113
#: apps/wei/models.py:298
msgid "bus"
msgstr ""
#: apps/wei/forms/registration.py:50
#: apps/wei/forms/registration.py:52
msgid ""
"This choice is not definitive. The WEI organizers are free to attribute for "
"you a bus and a team, in particular if you are a free eletron."
msgstr ""
#: apps/wei/forms/registration.py:57
#: apps/wei/forms/registration.py:59
msgid "Team"
msgstr ""
#: apps/wei/forms/registration.py:59
#: apps/wei/forms/registration.py:61
msgid ""
"Leave this field empty if you won't be in a team (staff, bus chief, free "
"electron)"
msgstr ""
#: apps/wei/forms/registration.py:65 apps/wei/forms/registration.py:75
#: apps/wei/forms/registration.py:67 apps/wei/forms/registration.py:77
#: apps/wei/models.py:148
msgid "WEI Roles"
msgstr ""
#: apps/wei/forms/registration.py:66
#: apps/wei/forms/registration.py:68
msgid "Select the roles that you are interested in."
msgstr ""
#: apps/wei/forms/registration.py:111
#: apps/wei/forms/registration.py:113
msgid "This team doesn't belong to the given bus."
msgstr ""
#: apps/wei/forms/surveys/wei2020.py:26
#: apps/wei/forms/surveys/wei2020.py:29
msgid "Choose a word:"
msgstr ""
@ -1640,25 +1644,25 @@ msgstr ""
msgid "WEI memberships"
msgstr ""
#: apps/wei/tables.py:57 apps/wei/tables.py:58 apps/wei/tables.py:95
#: apps/wei/tables.py:58 apps/wei/tables.py:59 apps/wei/tables.py:96
#: templates/treasury/sogecredit_detail.html:57
msgid "Validate"
msgstr ""
#: apps/wei/tables.py:125
#: apps/wei/tables.py:126
msgid "Year"
msgstr ""
#: apps/wei/tables.py:163 templates/wei/bus_tables.html:26
#: apps/wei/tables.py:164 templates/wei/bus_tables.html:26
#: templates/wei/busteam_tables.html:43
msgid "Teams"
msgstr ""
#: apps/wei/tables.py:172 apps/wei/tables.py:213
#: apps/wei/tables.py:173 apps/wei/tables.py:214
msgid "Members count"
msgstr ""
#: apps/wei/tables.py:179 apps/wei/tables.py:210
#: apps/wei/tables.py:180 apps/wei/tables.py:211
msgid "members"
msgstr ""
@ -2316,6 +2320,10 @@ msgstr ""
msgid "The Note Kfet team."
msgstr ""
#: templates/registration/mails/email_validation_email.html:40
msgid "Mail generated by the Note Kfet on the"
msgstr ""
#: templates/registration/password_change_done.html:8
msgid "Your password was changed."
msgstr ""

Some files were not shown because too many files have changed in this diff Show More