Commit f28ad9a1 authored by Levy--Falk Hugo's avatar Levy--Falk Hugo

Vérification de la permission de créditer le solde cohérente.

parent 3dc863a6
......@@ -116,6 +116,7 @@ class Migration(migrations.Migration):
('minimum_balance', models.DecimalField(decimal_places=2, default=0, help_text='The minimal amount of money allowed for the balance at the end of a payment. You can specify negative amount.', max_digits=5, verbose_name='Minimum balance')),
('payment', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='payment_method', to='cotisations.Paiement')),
('maximum_balance', models.DecimalField(decimal_places=2, default=50, help_text='The maximal amount of money allowed for the balance.', max_digits=5, verbose_name='Maximum balance', null=True, blank=True)),
('credit_balance_allowed', models.BooleanField(default=False, verbose_name='Allow user to credit their balance')),
],
bases=(cotisations.payment_methods.mixins.PaymentMethodMixin, models.Model),
options={'verbose_name': 'User Balance'},
......
......@@ -63,6 +63,10 @@ class BalancePayment(PaymentMethodMixin, models.Model):
blank=True,
null=True,
)
credit_balance_allowed = models.BooleanField(
verbose_name=_l("Allow user to credit their balance"),
default=False,
)
def end_payment(self, invoice, request):
"""Changes the user's balance to pay the invoice. If it is not
......@@ -108,3 +112,9 @@ class BalancePayment(PaymentMethodMixin, models.Model):
float(user.solde) - float(price) >= self.minimum_balance,
_("Your balance is too low for this operation.")
)
def can_credit_balance(self, user_request):
return (
len(Paiement.find_allowed_payments(user_request)
.exclude(is_balance=True)) > 0
) and self.credit_balance_allowed
......@@ -699,13 +699,31 @@ def index(request):
# TODO : change solde to balance
@login_required
@can_create(Facture)
@can_edit(User)
def credit_solde(request, user, **_kwargs):
"""
View used to edit the balance of a user.
Can be use either to increase or decrease a user's balance.
"""
try:
balance = find_payment_method(Paiement.objects.get(is_balance=True))
except Paiement.DoesNotExist:
credit_allowed = False
else:
credit_allowed = (
balance is not None
and balance.can_credit_balance(request.user)
)
if not credit_allowed:
messages.error(
request,
_("You are not allowed to credit your balance.")
)
return redirect(reverse(
'users:profil',
kwargs={'userid': user.id}
))
refill_form = RechargeForm(request.POST or None, user=request.user)
if refill_form.is_valid():
price = refill_form.cleaned_data['value']
......
......@@ -67,6 +67,7 @@ from re2o.acl import (
can_view_all,
can_change
)
from cotisations.utils import find_payment_method
from .serializers import MailingSerializer, MailingMemberSerializer
from .models import (
......@@ -898,9 +899,15 @@ def profil(request, users, **_kwargs):
request.GET.get('order'),
SortTable.USERS_INDEX_WHITE
)
balance, _created = Paiement.objects.get_or_create(moyen="solde")
user_solde = Facture.can_create(request.user)[0] \
and balance.can_use_payment(request.user)[0]
try:
balance = find_payment_method(Paiement.objects.get(is_balance=True))
except Paiement.DoesNotExist:
user_solde = False
else:
user_solde = (
balance is not None
and balance.can_credit_balance(request.user)
)
return render(
request,
'users/profil.html',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment