Add real BD fee

This commit is contained in:
Jean-Baptiste Doderlein 2022-08-30 07:54:39 +00:00
parent 8a03defc37
commit 121c49a5b6
11 changed files with 188 additions and 28 deletions

View file

@ -91,7 +91,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
}).done(function () { }).done(function () {
if (target.hasClass("table-info")) if (target.hasClass("table-info"))
addMsg( addMsg(
"{% trans "Entry done, but caution: the user is not a Kfet member." %}", "{% trans "Entry done, but caution: the user is not a member." %}",
"warning", 10000); "warning", 10000);
else else
addMsg("Entry made!", "success", 4000); addMsg("Entry made!", "success", 4000);
@ -126,7 +126,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
}).done(function () { }).done(function () {
if (target.hasClass("table-info")) if (target.hasClass("table-info"))
addMsg( addMsg(
"{% trans "Entry done, but caution: the user is not a Kfet member." %}", "{% trans "Entry done, but caution: the user is not a member." %}",
"warning", 10000); "warning", 10000);
else else
addMsg("{% trans "Entry done!" %}", "success", 4000); addMsg("{% trans "Entry done!" %}", "success", 4000);

View file

@ -0,0 +1,42 @@
# Generated by Django 2.2.28 on 2022-08-17 20:53
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('member', '0001_initial'),
('permission', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='membership',
name='roles',
field=models.ManyToManyField(related_name='memberships', to='permission.Role', verbose_name='roles'),
),
migrations.AddField(
model_name='membership',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='memberships', to=settings.AUTH_USER_MODEL, verbose_name='user'),
),
migrations.AddField(
model_name='club',
name='parent_club',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='member.Club', verbose_name='parent club'),
),
migrations.AddIndex(
model_name='profile',
index=models.Index(fields=['user'], name='member_prof_user_id_30c316_idx'),
),
migrations.AddIndex(
model_name='membership',
index=models.Index(fields=['user'], name='member_memb_user_id_945dbc_idx'),
),
]

View file

@ -0,0 +1,97 @@
"""Migration member default BDE BDA"""
from django.db import migrations
def create_initial_club(apps, schema_editor):
"""
The clubs BDE BDA BDS are pre-injected.
"""
Club = apps.get_model("member", "club")
NoteClub = apps.get_model("note", "noteclub")
Alias = apps.get_model("note", "alias")
ContentType = apps.get_model('contenttypes', 'ContentType')
polymorphic_ctype_id = ContentType.objects.get_for_model(NoteClub).id
Club.objects.get_or_create(
id=1,
name="BDE",
email="tresorerie.bde@example.com",
require_memberships=True,
membership_fee_paid=3500,
membership_fee_unpaid=2800,
membership_duration=396,
membership_start="2022-08-01",
membership_end="2023-09-30",
)
Club.objects.get_or_create(
id=2,
name="BDA",
email="tresorerie.bda@example.com",
require_memberships=True,
membership_fee_paid=2500,
membership_fee_unpaid=1700,
membership_duration=396,
membership_start="2022-08-01",
membership_end="2023-09-30",
)
Club.objects.get_or_create(
id=3,
name="BDS",
email="tresorerie.bds@example.com",
require_memberships=True,
membership_fee_paid=3000,
membership_fee_unpaid=2300,
membership_duration=396,
membership_start="2022-08-01",
membership_end="2023-09-30",
)
NoteClub.objects.get_or_create(
id=5,
club_id=1,
polymorphic_ctype_id=polymorphic_ctype_id,
)
NoteClub.objects.get_or_create(
id=6,
club_id=2,
polymorphic_ctype_id=polymorphic_ctype_id,
)
NoteClub.objects.get_or_create(
id=7,
club_id=3,
polymorphic_ctype_id=polymorphic_ctype_id,
)
Alias.objects.get_or_create(
id=5,
note_id=5,
name="BDE",
normalized_name="bde",
)
Alias.objects.get_or_create(
id=6,
note_id=6,
name="BDA",
normalized_name="bda",
)
Alias.objects.get_or_create(
id=7,
note_id=7,
name="BDS",
normalized_name="bds",
)
class Migration(migrations.Migration):
dependencies = [
('member', '0002_auto_20220817_2253'),
('note', '0002_special_note'),
]
operations = [
migrations.RunPython(create_initial_club),
]

View file

@ -153,7 +153,7 @@ class Profile(models.Model):
return str(self.user) return str(self.user)
def send_email_validation_link(self): def send_email_validation_link(self):
subject = "[Note Kfet] " + str(_("Activate your Note Kfet account")) subject = "[Note Ker Lann] " + str(_("Activate your Note Ker Lann account"))
token = email_validation_token.make_token(self.user) token = email_validation_token.make_token(self.user)
uid = urlsafe_base64_encode(force_bytes(self.user_id)) uid = urlsafe_base64_encode(force_bytes(self.user_id))
message = loader.render_to_string('registration/mails/email_validation_email.txt', message = loader.render_to_string('registration/mails/email_validation_email.txt',

View file

@ -15,7 +15,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
<div class="alert alert-info"> <div class="alert alert-info">
<h4>À quoi sert un jeton d'authentification ?</h4> <h4>À quoi sert un jeton d'authentification ?</h4>
Un jeton vous permet de vous connecter à <a href="/api/">l'API de la Note Kfet</a> via votre propre compte Un jeton vous permet de vous connecter à <a href="/api/">l'API de la Note Ker Lann</a> via votre propre compte
depuis un client externe.<br /> depuis un client externe.<br />
Il suffit pour cela d'ajouter en en-tête de vos requêtes <code>Authorization: Token &lt;TOKEN&gt;</code> Il suffit pour cela d'ajouter en en-tête de vos requêtes <code>Authorization: Token &lt;TOKEN&gt;</code>
pour pouvoir vous identifier.<br /><br /> pour pouvoir vous identifier.<br /><br />
@ -55,10 +55,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
<div class="card-header"> <div class="card-header">
<div class="alert alert-info"> <div class="alert alert-info">
<p> <p>
La Note Kfet implémente également le protocole <a href="https://oauth.net/2/">OAuth2</a>, afin de La Note Ker Lann implémente également le protocole <a href="https://oauth.net/2/">OAuth2</a>, afin de
permettre à des applications tierces d'interagir avec la Note en récoltant des informations permettre à des applications tierces d'interagir avec la Note en récoltant des informations
(de connexion par exemple) voir en permettant des modifications à distance, par exemple lorsqu'il (de connexion par exemple) voir en permettant des modifications à distance, par exemple lorsqu'il
s'agit d'avoir un site marchand sur lequel faire des transactions via la Note Kfet. s'agit d'avoir un site marchand sur lequel faire des transactions via la Note Ker Lann.
</p> </p>
<p> <p>

View file

@ -189,7 +189,7 @@ class NoteClub(Note):
def send_mail_negative_balance(self): def send_mail_negative_balance(self):
plain_text = render_to_string("note/mails/negative_balance.txt", dict(note=self)) plain_text = render_to_string("note/mails/negative_balance.txt", dict(note=self))
html = render_to_string("note/mails/negative_balance.html", dict(note=self)) html = render_to_string("note/mails/negative_balance.html", dict(note=self))
send_mail("[Note Kfet] Passage en négatif (club {})".format(self.club.name), plain_text, send_mail("[Note Ker Lann] Passage en négatif (club {})".format(self.club.name), plain_text,
settings.DEFAULT_FROM_EMAIL, [self.club.email], html_message=html) settings.DEFAULT_FROM_EMAIL, [self.club.email], html_message=html)

View file

@ -1979,7 +1979,8 @@
59, 59,
60, 60,
61, 61,
62 62,
169
] ]
} }
}, },
@ -1998,9 +1999,21 @@
60, 60,
61, 61,
62, 62,
63,
64,
65,
66,
67,
68,
69,
151,
166, 166,
167, 167,
168, 168,
172,
173,
174,
175,
182, 182,
184, 184,
185 185

View file

@ -29,7 +29,7 @@ class InvoiceForm(forms.ModelForm):
class Meta: class Meta:
model = Invoice model = Invoice
exclude = ('bde', 'date', 'tex', ) exclude = ('date', 'tex', )
class ProductForm(forms.ModelForm): class ProductForm(forms.ModelForm):

View file

@ -0,0 +1,18 @@
# Generated by Django 2.2.28 on 2022-08-24 17:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('treasury', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='invoice',
name='bde',
field=models.CharField(choices=[('BDE', 'BDE'), ('BDA', 'BDA'), ('BDS', 'BDS')], default='BDE', max_length=32, verbose_name='BD?'),
),
]

View file

@ -31,8 +31,10 @@ class Invoice(models.Model):
default='BDE', default='BDE',
choices=( choices=(
('BDE', 'BDE'), ('BDE', 'BDE'),
('BDA', 'BDA'),
('BDS', 'BDS'),
), ),
verbose_name=_("BDE"), verbose_name=_("BD?"),
) )
object = models.CharField( object = models.CharField(
@ -89,10 +91,10 @@ class Invoice(models.Model):
products = self.products.all() products = self.products.all()
self.place = "Gif-sur-Yvette" self.place = "Bruz"
self.my_name = "BDE ENS Cachan" self.my_name = f"{self.bde} ENS Rennes"
self.my_address_street = "4 avenue des Sciences" self.my_address_street = "14 avenue Robert Schumann"
self.my_city = "91190 Gif-sur-Yvette" self.my_city = "35170 Bruz"
self.bank_code = 30003 self.bank_code = 30003
self.desk_code = 3894 self.desk_code = 3894
self.account_number = 37280662 self.account_number = 37280662

View file

@ -47,18 +47,6 @@
{% endfor %} {% endfor %}
} }
% Logo du BDE
\AddToShipoutPicture*{
\put(0,0){
\parbox[b][\paperheight]{\paperwidth}{%
\vfill
\centering
\includegraphics[width=\textwidth]{../../apps/treasury/static/img/{{ obj.bde }}_bg.jpg}
\vfill
}
}
}
%%%%%%%%%%%%%%%%%%%%% A MODIFIER DANS LA FACTURE %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% A MODIFIER DANS LA FACTURE %%%%%%%%%%%%%%%%%%%%%
% Infos Association % Infos Association
@ -105,8 +93,8 @@
\renewcommand{\headrulewidth}{0pt} \renewcommand{\headrulewidth}{0pt}
\cfoot{ \cfoot{
\small{\MonNom ~--~ \MonAdresseRue ~ \MonAdresseVille ~--~ Téléphone : +33(0)6 89 88 56 50\newline \small{\MonNom ~--~ \MonAdresseRue ~ \MonAdresseVille ~--~ Téléphone : +33(0)6 00 00 00 00\newline
Site web : bde.ens-cachan.fr ~--~ E-mail : tresorerie.bde@lists.crans.org \newline Numéro SIRET : 399 485 838 00011 Site web : TODO ~--~ E-mail : TODO \newline Numéro SIRET : 000 000 000 00000
} }
} }