Guests can pay with CB or coins, lot of other improvements

This commit is contained in:
Yohann D'ANELLO 2020-03-28 16:52:58 +01:00
parent 81cfaf12fa
commit c8b72cf1ff
10 changed files with 304 additions and 133 deletions

View File

@ -3,7 +3,7 @@
from rest_framework import serializers
from ..models import ActivityType, Activity, Guest, Entry
from ..models import ActivityType, Activity, Guest, Entry, GuestTransaction
class ActivityTypeSerializer(serializers.ModelSerializer):
@ -48,3 +48,14 @@ class EntrySerializer(serializers.ModelSerializer):
class Meta:
model = Entry
fields = '__all__'
class GuestTransactionSerializer(serializers.ModelSerializer):
"""
REST API Serializer for Special transactions.
The djangorestframework plugin will analyse the model `GuestTransaction` and parse all fields in the API.
"""
class Meta:
model = GuestTransaction
fields = '__all__'

View File

@ -69,8 +69,6 @@ class Activity(models.Model):
'note.Note',
on_delete=models.PROTECT,
related_name='+',
null=True,
blank=True,
verbose_name=_('note'),
)
@ -152,7 +150,7 @@ class Entry(models.Model):
GuestTransaction.objects.create(
source=self.note,
source_alias=self.note.user.username,
destination=self.activity.organizer.note,
destination=self.note,
destination_alias=self.activity.organizer.name,
quantity=1,
amount=self.activity.activity_type.guest_entry_fee,

View File

@ -7,7 +7,7 @@ import django_tables2 as tables
from django_tables2 import A
from note.templatetags.pretty_money import pretty_money
from .models import Activity, Guest
from .models import Activity, Guest, Entry
class ActivityTable(tables.Table):
@ -55,6 +55,22 @@ class GuestTable(tables.Table):
return _("remove").capitalize()
def get_row_class(record):
c = "table-row"
if isinstance(record, Guest):
if record.has_entry:
c += " table-success"
else:
c += " table-warning"
else:
qs = Entry.objects.filter(note=record.note, activity=record.activity, guest=None)
if qs.exists():
c += " table-success"
elif record.note.balance < 0:
c += " table-danger"
return c
class EntryTable(tables.Table):
type = tables.Column(verbose_name=_("Type"))
@ -82,9 +98,11 @@ class EntryTable(tables.Table):
}
template_name = 'django_tables2/bootstrap4.html'
row_attrs = {
'class': 'table-row',
'class': lambda record: get_row_class(record),
'id': lambda record: "row-" + ("guest-" if isinstance(record, Guest) else "membership-") + str(record.pk),
'data-type': lambda record: "guest" if isinstance(record, Guest) else "membership",
'data-id': lambda record: record.pk,
'data-id': lambda record: record.pk if isinstance(record, Guest) else record.note.pk,
'data-inviter': lambda record: record.inviter.pk if isinstance(record, Guest) else "",
'data-last-name': lambda record: record.last_name,
'data-first-name': lambda record: record.first_name,
}

View File

@ -1,5 +1,6 @@
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
from datetime import datetime
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.contenttypes.models import ContentType
@ -8,11 +9,11 @@ from django.urls import reverse_lazy
from django.views.generic import CreateView, DetailView, UpdateView, TemplateView
from django.utils.translation import gettext_lazy as _
from django_tables2.views import SingleTableView
from note.models import NoteUser, Alias
from note.models import NoteUser, Alias, NoteSpecial
from permission.backends import PermissionBackend
from .forms import ActivityForm, GuestForm
from .models import Activity, Guest
from .models import Activity, Guest, Entry
from .tables import ActivityTable, GuestTable, EntryTable
@ -31,7 +32,10 @@ class ActivityListView(LoginRequiredMixin, SingleTableView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['title'] = _("Upcoming activities")
ctx['title'] = _("Activities")
upcoming_activities = Activity.objects.filter(date_end__gt=datetime.now())
ctx['upcoming'] = ActivityTable(data=upcoming_activities)
return ctx
@ -115,12 +119,16 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
.distinct("username")[:20]
for note in note_qs:
note.type = "Adhérent"
note.activity = activity
matched.append(note)
table = EntryTable(data=matched)
ctx["table"] = table
ctx["entries"] = Entry.objects.filter(activity=activity)
ctx["title"] = _('Entry for activity "{}"').format(activity.name)
ctx["noteuser_ctype"] = ContentType.objects.get_for_model(NoteUser).pk
ctx["notespecial_ctype"] = ContentType.objects.get_for_model(NoteSpecial).pk
return ctx

View File

@ -163,6 +163,7 @@ class SpecialTransactionSerializer(serializers.ModelSerializer):
fields = '__all__'
# noinspection PyUnresolvedReferences
class TransactionPolymorphicSerializer(PolymorphicSerializer):
model_serializer_mapping = {
Transaction: TransactionSerializer,
@ -171,5 +172,12 @@ class TransactionPolymorphicSerializer(PolymorphicSerializer):
SpecialTransaction: SpecialTransactionSerializer,
}
try:
from activity.models import GuestTransaction
from activity.api.serializers import GuestTransactionSerializer
model_serializer_mapping[GuestTransaction] = GuestTransactionSerializer
except ImportError: # Activity app is not loaded
pass
class Meta:
model = Transaction

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-28 01:54+0100\n"
"POT-Creation-Date: 2020-03-28 16:42+0100\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"
@ -19,10 +19,11 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps/activity/apps.py:10 apps/activity/models.py:101
#: apps/activity/models.py:109
msgid "activity"
msgstr ""
#: apps/activity/models.py:19 apps/activity/models.py:44
#: apps/activity/models.py:21 apps/activity/models.py:46
#: apps/member/models.py:64 apps/member/models.py:122
#: apps/note/models/notes.py:188 apps/note/models/transactions.py:24
#: apps/note/models/transactions.py:44 apps/note/models/transactions.py:231
@ -30,38 +31,38 @@ msgstr ""
msgid "name"
msgstr ""
#: apps/activity/models.py:23 templates/activity/activity_detail.html:34
#: apps/activity/models.py:25 templates/activity/activity_detail.html:34
msgid "can invite"
msgstr ""
#: apps/activity/models.py:26 templates/activity/activity_detail.html:38
#: apps/activity/models.py:28 templates/activity/activity_detail.html:38
msgid "guest entry fee"
msgstr ""
#: apps/activity/models.py:30
#: apps/activity/models.py:32
msgid "activity type"
msgstr ""
#: apps/activity/models.py:31
#: apps/activity/models.py:33
msgid "activity types"
msgstr ""
#: apps/activity/models.py:49 apps/note/models/transactions.py:69
#: apps/activity/models.py:51 apps/note/models/transactions.py:69
#: apps/permission/models.py:90 templates/activity/activity_detail.html:16
msgid "description"
msgstr ""
#: apps/activity/models.py:56 apps/note/models/notes.py:164
#: apps/activity/models.py:58 apps/note/models/notes.py:164
#: apps/note/models/transactions.py:62
#: templates/activity/activity_detail.html:19
msgid "type"
msgstr ""
#: apps/activity/models.py:63 templates/activity/activity_detail.html:28
#: apps/activity/models.py:65 templates/activity/activity_detail.html:28
msgid "organizer"
msgstr ""
#: apps/activity/models.py:72 apps/activity/models.py:113 apps/note/apps.py:14
#: apps/activity/models.py:72 apps/activity/models.py:120 apps/note/apps.py:14
#: apps/note/models/notes.py:58
msgid "note"
msgstr ""
@ -91,43 +92,80 @@ msgstr ""
msgid "activities"
msgstr ""
#: apps/activity/models.py:107
#: apps/activity/models.py:114
msgid "entry time"
msgstr ""
#: apps/activity/models.py:129
#: apps/activity/models.py:137
msgid "Already entered on "
msgstr ""
#: apps/activity/models.py:137 apps/activity/tables.py:54
msgid "{:%Y-%m-%d %H:%M:%S}"
msgstr ""
#: apps/activity/models.py:145
msgid "The balance is negative."
msgstr ""
#: apps/activity/models.py:177
msgid "last name"
msgstr ""
#: apps/activity/models.py:134 templates/member/profile_info.html:14
#: apps/activity/models.py:182 templates/member/profile_info.html:14
msgid "first name"
msgstr ""
#: apps/activity/models.py:141
#: apps/activity/models.py:189
msgid "inviter"
msgstr ""
#: apps/activity/models.py:151
#: apps/activity/models.py:202
msgid "guest"
msgstr ""
#: apps/activity/models.py:152
#: apps/activity/models.py:203
msgid "guests"
msgstr ""
#: apps/activity/models.py:163
#: apps/activity/models.py:214
msgid "Invitation"
msgstr ""
#: apps/activity/tables.py:54
msgid "Entered on "
msgstr ""
#: apps/activity/tables.py:55
msgid "remove"
msgstr ""
#: apps/activity/views.py:34
msgid "Upcoming activities"
#: apps/activity/tables.py:75 apps/treasury/models.py:126
msgid "Type"
msgstr ""
#: apps/activity/views.py:119
#: apps/activity/tables.py:77 apps/treasury/forms.py:120
msgid "Last name"
msgstr ""
#: apps/activity/tables.py:79 apps/treasury/forms.py:122
#: templates/note/transaction_form.html:92
msgid "First name"
msgstr ""
#: apps/activity/tables.py:81 apps/note/models/notes.py:67
msgid "Note"
msgstr ""
#: apps/activity/tables.py:83
msgid "Balance"
msgstr ""
#: apps/activity/views.py:35 templates/base.html:94
msgid "Activities"
msgstr ""
#: apps/activity/views.py:130
msgid "Entry for activity \"{}\""
msgstr ""
@ -357,10 +395,6 @@ msgstr ""
msgid "notes"
msgstr ""
#: apps/note/models/notes.py:67
msgid "Note"
msgstr ""
#: apps/note/models/notes.py:77 apps/note/models/notes.py:101
msgid "This alias is already taken."
msgstr ""
@ -573,14 +607,6 @@ msgstr ""
msgid "You can't change the type of the remittance."
msgstr ""
#: apps/treasury/forms.py:120
msgid "Last name"
msgstr ""
#: apps/treasury/forms.py:122 templates/note/transaction_form.html:92
msgid "First name"
msgstr ""
#: apps/treasury/forms.py:124 templates/note/transaction_form.html:98
msgid "Bank"
msgstr ""
@ -639,10 +665,6 @@ msgstr ""
msgid "Date"
msgstr ""
#: apps/treasury/models.py:126
msgid "Type"
msgstr ""
#: apps/treasury/models.py:131
msgid "Comment"
msgstr ""
@ -733,10 +755,34 @@ msgstr ""
msgid "Guests list"
msgstr ""
#: templates/activity/activity_list.html:7
#: templates/activity/activity_entry.html:10
msgid "Return to activity page"
msgstr ""
#: templates/activity/activity_entry.html:18
msgid "entries"
msgstr ""
#: templates/activity/activity_entry.html:18
msgid "entry"
msgstr ""
#: templates/activity/activity_list.html:5
msgid "Upcoming activities"
msgstr ""
#: templates/activity/activity_list.html:10
msgid "There is no planned activity."
msgstr ""
#: templates/activity/activity_list.html:14
msgid "New activity"
msgstr ""
#: templates/activity/activity_list.html:18
msgid "All activities"
msgstr ""
#: templates/base.html:13
msgid "The ENS Paris-Saclay BDE note."
msgstr ""
@ -745,10 +791,6 @@ msgstr ""
msgid "Clubs"
msgstr ""
#: templates/base.html:94
msgid "Activities"
msgstr ""
#: templates/cas_server/base.html:7
msgid "Central Authentication Service"
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-28 01:54+0100\n"
"POT-Creation-Date: 2020-03-28 16:42+0100\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"
@ -14,10 +14,11 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps/activity/apps.py:10 apps/activity/models.py:101
#: apps/activity/models.py:109
msgid "activity"
msgstr "activité"
#: apps/activity/models.py:19 apps/activity/models.py:44
#: apps/activity/models.py:21 apps/activity/models.py:46
#: apps/member/models.py:64 apps/member/models.py:122
#: apps/note/models/notes.py:188 apps/note/models/transactions.py:24
#: apps/note/models/transactions.py:44 apps/note/models/transactions.py:231
@ -25,45 +26,45 @@ msgstr "activité"
msgid "name"
msgstr "nom"
#: apps/activity/models.py:23 templates/activity/activity_detail.html:34
#: apps/activity/models.py:25 templates/activity/activity_detail.html:34
msgid "can invite"
msgstr "peut inviter"
#: apps/activity/models.py:26 templates/activity/activity_detail.html:38
#: apps/activity/models.py:28 templates/activity/activity_detail.html:38
msgid "guest entry fee"
msgstr "cotisation de l'entrée invité"
#: apps/activity/models.py:30
#: apps/activity/models.py:32
msgid "activity type"
msgstr "type d'activité"
#: apps/activity/models.py:31
#: apps/activity/models.py:33
msgid "activity types"
msgstr "types d'activité"
#: apps/activity/models.py:49 apps/note/models/transactions.py:69
#: apps/activity/models.py:51 apps/note/models/transactions.py:69
#: apps/permission/models.py:90 templates/activity/activity_detail.html:16
msgid "description"
msgstr "description"
#: apps/activity/models.py:56 apps/note/models/notes.py:164
#: apps/activity/models.py:58 apps/note/models/notes.py:164
#: apps/note/models/transactions.py:62
#: templates/activity/activity_detail.html:19
msgid "type"
msgstr "type"
#: apps/activity/models.py:63 templates/activity/activity_detail.html:28
#: apps/activity/models.py:65 templates/activity/activity_detail.html:28
msgid "organizer"
msgstr "organisateur"
#: apps/activity/models.py:72 apps/activity/models.py:113 apps/note/apps.py:14
#: apps/activity/models.py:72 apps/activity/models.py:120 apps/note/apps.py:14
#: apps/note/models/notes.py:58
msgid "note"
msgstr "note"
#: apps/activity/models.py:79 templates/activity/activity_detail.html:31
msgid "attendees club"
msgstr ""
msgstr "club attendu"
#: apps/activity/models.py:83 templates/activity/activity_detail.html:22
msgid "start date"
@ -80,59 +81,96 @@ msgstr "valide"
#: apps/activity/models.py:97 templates/activity/activity_detail.html:56
msgid "open"
msgstr ""
msgstr "ouvrir"
#: apps/activity/models.py:102
msgid "activities"
msgstr "activités"
#: apps/activity/models.py:107
#: apps/activity/models.py:114
msgid "entry time"
msgstr ""
msgstr "heure d'entrée"
#: apps/activity/models.py:129
#: apps/activity/models.py:137
msgid "Already entered on "
msgstr "Déjà rentré le "
#: apps/activity/models.py:137 apps/activity/tables.py:54
msgid "{:%Y-%m-%d %H:%M:%S}"
msgstr "{:%d/%m/%Y %H:%M:%S}"
#: apps/activity/models.py:145
msgid "The balance is negative."
msgstr "La note est en négatif."
#: apps/activity/models.py:177
msgid "last name"
msgstr "nom de famille"
#: apps/activity/models.py:134 templates/member/profile_info.html:14
#: apps/activity/models.py:182 templates/member/profile_info.html:14
msgid "first name"
msgstr "prénom"
#: apps/activity/models.py:141
#: apps/activity/models.py:189
msgid "inviter"
msgstr "hôte"
#: apps/activity/models.py:151
#: apps/activity/models.py:202
msgid "guest"
msgstr "invité"
#: apps/activity/models.py:152
#: apps/activity/models.py:203
msgid "guests"
msgstr "invités"
#: apps/activity/models.py:163
#: apps/activity/models.py:214
msgid "Invitation"
msgstr "Invitation"
#: apps/activity/tables.py:54
msgid "Entered on "
msgstr "Entré le "
#: apps/activity/tables.py:55
msgid "remove"
msgstr "supprimer"
#: apps/activity/views.py:34
msgid "Upcoming activities"
msgstr "Activités à venir"
#: apps/activity/tables.py:75 apps/treasury/models.py:126
msgid "Type"
msgstr "Type"
#: apps/activity/views.py:119
#: apps/activity/tables.py:77 apps/treasury/forms.py:120
msgid "Last name"
msgstr "Nom de famille"
#: apps/activity/tables.py:79 apps/treasury/forms.py:122
#: templates/note/transaction_form.html:92
msgid "First name"
msgstr "Prénom"
#: apps/activity/tables.py:81 apps/note/models/notes.py:67
msgid "Note"
msgstr "Note"
#: apps/activity/tables.py:83
msgid "Balance"
msgstr "Solde du compte"
#: apps/activity/views.py:35 templates/base.html:94
msgid "Activities"
msgstr "Activités"
#: apps/activity/views.py:130
msgid "Entry for activity \"{}\""
msgstr "Entrées pour l'activité « {} »"
#: apps/api/apps.py:10
msgid "API"
msgstr ""
msgstr "API"
#: apps/logs/apps.py:11
msgid "Logs"
msgstr ""
msgstr "Logs"
#: apps/logs/models.py:21 apps/note/models/notes.py:117
msgid "user"
@ -283,7 +321,7 @@ msgstr "cotisation"
#: apps/member/models.py:172
msgid "User is not a member of the parent club"
msgstr ""
msgstr "L'utilisateur n'est pas membre du club parent"
#: apps/member/models.py:176
msgid "membership"
@ -357,10 +395,6 @@ msgstr "créée le"
msgid "notes"
msgstr "notes"
#: apps/note/models/notes.py:67
msgid "Note"
msgstr "Note"
#: apps/note/models/notes.py:77 apps/note/models/notes.py:101
msgid "This alias is already taken."
msgstr "Cet alias est déjà pris."
@ -573,14 +607,6 @@ msgstr "La remise est déjà fermée."
msgid "You can't change the type of the remittance."
msgstr "Vous ne pouvez pas changer le type de la remise."
#: apps/treasury/forms.py:120
msgid "Last name"
msgstr "Nom de famille"
#: apps/treasury/forms.py:122 templates/note/transaction_form.html:92
msgid "First name"
msgstr "Prénom"
#: apps/treasury/forms.py:124 templates/note/transaction_form.html:98
msgid "Bank"
msgstr "Banque"
@ -639,10 +665,6 @@ msgstr "Prix unitaire"
msgid "Date"
msgstr "Date"
#: apps/treasury/models.py:126
msgid "Type"
msgstr "Type"
#: apps/treasury/models.py:131
msgid "Comment"
msgstr "Commentaire"
@ -733,10 +755,34 @@ msgstr "Inviter"
msgid "Guests list"
msgstr "Liste des invités"
#: templates/activity/activity_list.html:7
#: templates/activity/activity_entry.html:10
msgid "Return to activity page"
msgstr "Retour à la page de l'activité"
#: templates/activity/activity_entry.html:18
msgid "entries"
msgstr "entrées"
#: templates/activity/activity_entry.html:18
msgid "entry"
msgstr "entrée"
#: templates/activity/activity_list.html:5
msgid "Upcoming activities"
msgstr "Activités à venir"
#: templates/activity/activity_list.html:10
msgid "There is no planned activity."
msgstr "Il n'y a pas d'activité prévue."
#: templates/activity/activity_list.html:14
msgid "New activity"
msgstr "Nouvelle activité"
#: templates/activity/activity_list.html:18
msgid "All activities"
msgstr "Toutes les activités"
#: templates/base.html:13
msgid "The ENS Paris-Saclay BDE note."
msgstr "La note du BDE de l'ENS Paris-Saclay."
@ -745,10 +791,6 @@ msgstr "La note du BDE de l'ENS Paris-Saclay."
msgid "Clubs"
msgstr "Clubs"
#: templates/base.html:94
msgid "Activities"
msgstr "Activités"
#: templates/cas_server/base.html:7
msgid "Central Authentication Service"
msgstr ""
@ -882,9 +924,6 @@ msgstr "Changer le mot de passe"
msgid "balance"
msgstr "solde du compte"
msgid "Balance"
msgstr "Solde du compte"
#: templates/member/profile_info.html:41
msgid "Manage auth token"
msgstr "Gérer les jetons d'authentification"
@ -1138,21 +1177,3 @@ msgstr "Il n'y a pas de transaction associée à une remise ouverte."
#: templates/treasury/remittance_list.html:54
msgid "Closed remittances"
msgstr "Remises fermées"
#~ msgid "Account #%(id)s: %(username)s"
#~ msgstr "Compte n°%(id)s : %(username)s"
#~ msgid "Alias successfully deleted"
#~ msgstr "L'alias a bien été supprimé"
#~ msgid "New Alias"
#~ msgstr "Nouvel alias"
#~ msgid "Membership starts on"
#~ msgstr "L'adhésion commence le"
#~ msgid "Membership ends on"
#~ msgstr "L'adhésion finie le"
#~ msgid "Membership duration"
#~ msgstr "Durée de l'adhésion"

View File

@ -48,7 +48,7 @@
</div>
<div class="card-footer text-center">
{% if activity.open %}
{% if activity.open and "change__open"|has_perm:activity %}
<a class="btn btn-warning btn-sm my-1" href="{% url 'activity:activity_entry' pk=activity.pk %}"> {% trans "Entry page" %}</a>
{% endif %}

View File

@ -6,11 +6,16 @@
{% load perms %}
{% block content %}
<a href="{% url "activity:activity_detail" pk=activity.pk %}">
<button class="btn btn-light">{% trans "Return to activity page" %}</button>
</a>
<input id="alias" type="text" class="form-control" placeholder="Nom/note ...">
<hr>
<div id="entry_table">
<h2 class="text-center">{{ entries.count }} {% if entries.count >= 2 %}{% trans "entries" %}{% else %}{% trans "entry" %}{% endif %}</h2>
{% render_table table %}
</div>
{% endblock %}
@ -41,6 +46,8 @@
let type = target.attr("data-type");
let id = target.attr("data-id");
let last_name = target.attr("data-last-name");
let first_name = target.attr("data-first-name");
if (type === "membership") {
$.post("/api/activity/entry/?format=json", {
@ -56,18 +63,63 @@
});
}
else {
let line_obj = $("#buttons_guest_" + id);
if (line_obj.length || target.attr('class').includes("table-success")) {
line_obj.remove();
return;
}
let tr = "<tr class='text-center'>" +
"<td id='buttons_guest_" + id + "' style='table-danger center' colspan='5'>" +
"<button id='transaction_guest_" + id + "' class='btn btn-secondary'>Payer avec la note de l'hôte</button> " +
"<button id='transaction_guest_" + id + "_especes' class='btn btn-secondary'>Payer en espèces</button> " +
"<button id='transaction_guest_" + id + "_cb' class='btn btn-secondary'>Payer en CB</button></td>" +
"<tr>";
$(tr).insertAfter(target);
let makeTransaction = function() {
$.post("/api/activity/entry/?format=json", {
csrfmiddlewaretoken: CSRF_TOKEN,
activity: {{ activity.id }},
note: target.attr("data-inviter"),
guest: id
}).done(function () {
addMsg("Entrée effectuée !", "success");
reloadTable(true);
}).fail(function (xhr) {
errMsg(xhr.responseJSON);
});
};
let credit = function(credit_id, credit_name) {
return function() {
$.post("/api/note/transaction/transaction/",
{
"csrfmiddlewaretoken": CSRF_TOKEN,
"quantity": 1,
"amount": {{ activity.activity_type.guest_entry_fee }},
"reason": "Crédit " + credit_name + " (invitation {{ activity.name }})",
"valid": true,
"polymorphic_ctype": {{ notespecial_ctype }},
"resourcetype": "SpecialTransaction",
"source": credit_id,
"destination": target.attr('data-inviter'),
"last_name": last_name,
"first_name": first_name,
"bank": ""
}).done(function () {
makeTransaction();
reset();
}).fail(function (xhr) {
errMsg(xhr.responseJSON);
});
};
};
$("#transaction_guest_" + id).click(makeTransaction);
$("#transaction_guest_" + id + "_especes").click(credit(1, "espèces"));
$("#transaction_guest_" + id + "_cb").click(credit(2, "carte bancaire"));
}
$.post("/api/activity/entry/?format=json", {
csrfmiddlewaretoken: CSRF_TOKEN,
activity: {{ activity.id }},
note: target.attr("data-inviter"),
guest: id
}).done(function () {
addMsg("Entrée effectuée !", "success");
reloadTable(true);
}).fail(function(xhr) {
errMsg(xhr.responseJSON);
});
});
}
</script>

View File

@ -2,9 +2,22 @@
{% load render_table from django_tables2 %}
{% load i18n crispy_forms_tags%}
{% block content %}
{% render_table table %}
<h2>{% trans "Upcoming activities" %}</h2>
{% if upcoming.data %}
{% render_table upcoming %}
{% else %}
<div class="alert alert-warning">
{% trans "There is no planned activity." %}
</div>
{% endif %}
<a class="btn btn-primary" href="{% url 'activity:activity_create' %}">{% trans 'New activity' %}</a>
<hr>
<h2>{% trans "All activities" %}</h2>
{% render_table table %}
{% endblock %}
{% block extrajavascript %}