forked from DGNum/gestioCOF
Merge branch 'Aufinal/let_it_go' into 'master'
Change le fonctionnement du gel de compte Closes #280 See merge request klub-dev-ens/gestioCOF!493
This commit is contained in:
commit
8743301105
19 changed files with 169 additions and 65 deletions
|
@ -356,7 +356,9 @@ class TestReventeManageTest(TestCase):
|
||||||
|
|
||||||
def test_can_get(self):
|
def test_can_get(self):
|
||||||
client = Client()
|
client = Client()
|
||||||
client.force_login(self.user)
|
client.force_login(
|
||||||
|
self.user, backend="django.contrib.auth.backends.ModelBackend"
|
||||||
|
)
|
||||||
r = client.get(self.url)
|
r = client.get(self.url)
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,9 @@ class TestHomeView(TestCase):
|
||||||
def test_get(self, mock_messages):
|
def test_get(self, mock_messages):
|
||||||
user = User.objects.create_user(username="random_user")
|
user = User.objects.create_user(username="random_user")
|
||||||
give_bds_buro_permissions(user)
|
give_bds_buro_permissions(user)
|
||||||
self.client.force_login(user)
|
self.client.force_login(
|
||||||
|
user, backend="django.contrib.auth.backends.ModelBackend"
|
||||||
|
)
|
||||||
resp = self.client.get(reverse("bds:home"))
|
resp = self.client.get(reverse("bds:home"))
|
||||||
self.assertEquals(resp.status_code, 200)
|
self.assertEquals(resp.status_code, 200)
|
||||||
|
|
||||||
|
@ -44,7 +46,7 @@ class TestRegistrationView(TestCase):
|
||||||
self.assertRedirects(resp, login_url(next=url))
|
self.assertRedirects(resp, login_url(next=url))
|
||||||
|
|
||||||
# Logged-in but unprivileged GET
|
# Logged-in but unprivileged GET
|
||||||
client.force_login(user)
|
client.force_login(user, backend="django.contrib.auth.backends.ModelBackend")
|
||||||
resp = client.get(url)
|
resp = client.get(url)
|
||||||
self.assertEquals(resp.status_code, 403)
|
self.assertEquals(resp.status_code, 403)
|
||||||
|
|
||||||
|
@ -64,7 +66,7 @@ class TestRegistrationView(TestCase):
|
||||||
self.assertRedirects(resp, login_url(next=url))
|
self.assertRedirects(resp, login_url(next=url))
|
||||||
|
|
||||||
# Logged-in but unprivileged GET
|
# Logged-in but unprivileged GET
|
||||||
client.force_login(user)
|
client.force_login(user, backend="django.contrib.auth.backends.ModelBackend")
|
||||||
resp = client.get(url)
|
resp = client.get(url)
|
||||||
self.assertEquals(resp.status_code, 403)
|
self.assertEquals(resp.status_code, 403)
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,9 @@ class CSVExportAccessTest(MessagePatch, TestCase):
|
||||||
|
|
||||||
def test_get(self):
|
def test_get(self):
|
||||||
client = Client()
|
client = Client()
|
||||||
client.force_login(self.staff)
|
client.force_login(
|
||||||
|
self.staff, backend="django.contrib.auth.backends.ModelBackend"
|
||||||
|
)
|
||||||
r = client.get(self.url)
|
r = client.get(self.url)
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
|
|
||||||
|
@ -66,7 +68,7 @@ class CSVExportAccessTest(MessagePatch, TestCase):
|
||||||
|
|
||||||
def test_unauthorised(self):
|
def test_unauthorised(self):
|
||||||
client = Client()
|
client = Client()
|
||||||
client.force_login(self.u1)
|
client.force_login(self.u1, backend="django.contrib.auth.backends.ModelBackend")
|
||||||
r = client.get(self.url)
|
r = client.get(self.url)
|
||||||
self.assertEqual(r.status_code, 403)
|
self.assertEqual(r.status_code, 403)
|
||||||
|
|
||||||
|
@ -86,7 +88,9 @@ class CSVExportContentTest(MessagePatch, CSVResponseMixin, TestCase):
|
||||||
)
|
)
|
||||||
self.staff = make_staff_user("staff")
|
self.staff = make_staff_user("staff")
|
||||||
self.client = Client()
|
self.client = Client()
|
||||||
self.client.force_login(self.staff)
|
self.client.force_login(
|
||||||
|
self.staff, backend="django.contrib.auth.backends.ModelBackend"
|
||||||
|
)
|
||||||
|
|
||||||
def test_simple_event(self):
|
def test_simple_event(self):
|
||||||
self.event.subscribers.set([self.u1, self.u2])
|
self.event.subscribers.set([self.u1, self.u2])
|
||||||
|
|
|
@ -111,11 +111,17 @@ CORS_ORIGIN_WHITELIST = ("bda.ens.fr", "www.bda.ens.fr" "cof.ens.fr", "www.cof.e
|
||||||
# Auth-related stuff
|
# Auth-related stuff
|
||||||
# ---
|
# ---
|
||||||
|
|
||||||
AUTHENTICATION_BACKENDS += [
|
AUTHENTICATION_BACKENDS = (
|
||||||
"gestioncof.shared.COFCASBackend",
|
[
|
||||||
"kfet.auth.backends.GenericBackend",
|
# Must be in first
|
||||||
]
|
"kfet.auth.backends.BlockFrozenAccountBackend"
|
||||||
|
]
|
||||||
|
+ AUTHENTICATION_BACKENDS
|
||||||
|
+ [
|
||||||
|
"gestioncof.shared.COFCASBackend",
|
||||||
|
"kfet.auth.backends.GenericBackend",
|
||||||
|
]
|
||||||
|
)
|
||||||
LOGIN_URL = "cof-login"
|
LOGIN_URL = "cof-login"
|
||||||
LOGIN_REDIRECT_URL = "home"
|
LOGIN_REDIRECT_URL = "home"
|
||||||
|
|
||||||
|
|
|
@ -641,7 +641,7 @@ class ClubListViewTests(ViewTestCaseMixin, TestCase):
|
||||||
def test_as_staff(self):
|
def test_as_staff(self):
|
||||||
u = self.users["staff"]
|
u = self.users["staff"]
|
||||||
c = Client()
|
c = Client()
|
||||||
c.force_login(u)
|
c.force_login(u, backend="django.contrib.auth.backends.ModelBackend")
|
||||||
|
|
||||||
r = c.get(self.url)
|
r = c.get(self.url)
|
||||||
|
|
||||||
|
@ -686,7 +686,7 @@ class ClubMembersViewTests(ViewTestCaseMixin, TestCase):
|
||||||
self.c.respos.add(u)
|
self.c.respos.add(u)
|
||||||
|
|
||||||
c = Client()
|
c = Client()
|
||||||
c.force_login(u)
|
c.force_login(u, backend="django.contrib.auth.backends.ModelBackend")
|
||||||
r = c.get(self.url)
|
r = c.get(self.url)
|
||||||
|
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
|
|
||||||
from kfet.models import Account, GenericTeamToken
|
from kfet.models import Account, GenericTeamToken
|
||||||
|
|
||||||
|
@ -37,3 +38,36 @@ class GenericBackend(BaseKFetBackend):
|
||||||
team_token.delete()
|
team_token.delete()
|
||||||
|
|
||||||
return get_kfet_generic_user()
|
return get_kfet_generic_user()
|
||||||
|
|
||||||
|
|
||||||
|
class BlockFrozenAccountBackend:
|
||||||
|
def authenticate(self, request, **kwargs):
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_user(self, user_id):
|
||||||
|
return None
|
||||||
|
|
||||||
|
def has_perm(self, user_obj, perm, obj=None):
|
||||||
|
app_label, _ = perm.split(".")
|
||||||
|
if app_label == "kfet":
|
||||||
|
if (
|
||||||
|
hasattr(user_obj, "profile")
|
||||||
|
and hasattr(user_obj.profile, "account_kfet")
|
||||||
|
and user_obj.profile.account_kfet.is_frozen
|
||||||
|
):
|
||||||
|
raise PermissionDenied
|
||||||
|
|
||||||
|
# Dans le cas général, on se réfère aux autres backends
|
||||||
|
return False
|
||||||
|
|
||||||
|
def has_module_perms(self, user_obj, app_label):
|
||||||
|
if app_label == "kfet":
|
||||||
|
if (
|
||||||
|
hasattr(user_obj, "profile")
|
||||||
|
and hasattr(user_obj.profile, "account_kfet")
|
||||||
|
and user_obj.profile.account_kfet.is_frozen
|
||||||
|
):
|
||||||
|
raise PermissionDenied
|
||||||
|
|
||||||
|
# Dans le cas général, on se réfère aux autres backends
|
||||||
|
return False
|
||||||
|
|
|
@ -61,7 +61,7 @@ class AccountForm(forms.ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Account
|
model = Account
|
||||||
fields = ["trigramme", "promo", "nickname", "is_frozen"]
|
fields = ["trigramme", "promo", "nickname"]
|
||||||
widgets = {"trigramme": forms.TextInput(attrs={"autocomplete": "off"})}
|
widgets = {"trigramme": forms.TextInput(attrs={"autocomplete": "off"})}
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,6 +119,12 @@ class AccountPwdForm(forms.Form):
|
||||||
return self.account
|
return self.account
|
||||||
|
|
||||||
|
|
||||||
|
class AccountFrozenForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Account
|
||||||
|
fields = ["is_frozen"]
|
||||||
|
|
||||||
|
|
||||||
class CofForm(forms.ModelForm):
|
class CofForm(forms.ModelForm):
|
||||||
def clean_is_cof(self):
|
def clean_is_cof(self):
|
||||||
instance = getattr(self, "instance", None)
|
instance = getattr(self, "instance", None)
|
||||||
|
|
17
kfet/migrations/0076_unfreeze_accounts.py
Normal file
17
kfet/migrations/0076_unfreeze_accounts.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 2.2.17 on 2021-02-23 22:51
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
def unfreeze_accounts(apps, schema_editor):
|
||||||
|
Account = apps.get_model("kfet", "Account")
|
||||||
|
Account.objects.all().update(is_frozen=False)
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("kfet", "0075_remove_accountnegative_balance_offset"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [migrations.RunPython(unfreeze_accounts, migrations.RunPython.noop)]
|
30
kfet/migrations/0077_delete_frozen_permission.py
Normal file
30
kfet/migrations/0077_delete_frozen_permission.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Generated by Django 2.2.17 on 2021-02-23 23:22
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("kfet", "0076_unfreeze_accounts"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name="operation",
|
||||||
|
options={
|
||||||
|
"permissions": (
|
||||||
|
("perform_deposit", "Effectuer une charge"),
|
||||||
|
(
|
||||||
|
"perform_negative_operations",
|
||||||
|
"Enregistrer des commandes en négatif",
|
||||||
|
),
|
||||||
|
("cancel_old_operations", "Annuler des commandes non récentes"),
|
||||||
|
(
|
||||||
|
"perform_commented_operations",
|
||||||
|
"Enregistrer des commandes avec commentaires",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -180,9 +180,6 @@ class Account(models.Model):
|
||||||
return set(), False
|
return set(), False
|
||||||
if self.need_comment:
|
if self.need_comment:
|
||||||
perms.add("kfet.perform_commented_operations")
|
perms.add("kfet.perform_commented_operations")
|
||||||
# Checking is frozen account
|
|
||||||
if self.is_frozen:
|
|
||||||
perms.add("kfet.override_frozen_protection")
|
|
||||||
new_balance = self.balance + amount
|
new_balance = self.balance + amount
|
||||||
if new_balance < 0 and amount < 0:
|
if new_balance < 0 and amount < 0:
|
||||||
# Retrieving overdraft amount limit
|
# Retrieving overdraft amount limit
|
||||||
|
@ -726,7 +723,6 @@ class Operation(models.Model):
|
||||||
permissions = (
|
permissions = (
|
||||||
("perform_deposit", "Effectuer une charge"),
|
("perform_deposit", "Effectuer une charge"),
|
||||||
("perform_negative_operations", "Enregistrer des commandes en négatif"),
|
("perform_negative_operations", "Enregistrer des commandes en négatif"),
|
||||||
("override_frozen_protection", "Forcer le gel d'un compte"),
|
|
||||||
("cancel_old_operations", "Annuler des commandes non récentes"),
|
("cancel_old_operations", "Annuler des commandes non récentes"),
|
||||||
(
|
(
|
||||||
"perform_commented_operations",
|
"perform_commented_operations",
|
||||||
|
|
|
@ -211,7 +211,7 @@ class OpenKfetConsumerTest(ChannelTestCase):
|
||||||
)
|
)
|
||||||
t.user_permissions.add(is_team)
|
t.user_permissions.add(is_team)
|
||||||
c = WSClient()
|
c = WSClient()
|
||||||
c.force_login(t)
|
c.force_login(t, backend="django.contrib.auth.backends.ModelBackend")
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
c.send_and_consume(
|
c.send_and_consume(
|
||||||
|
@ -251,7 +251,9 @@ class OpenKfetScenarioTest(ChannelTestCase):
|
||||||
self.r_c.login(username="root", password="root")
|
self.r_c.login(username="root", password="root")
|
||||||
# its client (for websockets)
|
# its client (for websockets)
|
||||||
self.r_c_ws = WSClient()
|
self.r_c_ws = WSClient()
|
||||||
self.r_c_ws.force_login(self.r)
|
self.r_c_ws.force_login(
|
||||||
|
self.r, backend="django.contrib.auth.backends.ModelBackend"
|
||||||
|
)
|
||||||
|
|
||||||
self.kfet_open = OpenKfet(
|
self.kfet_open = OpenKfet(
|
||||||
cache_prefix="test_kfetopen_%s" % random.randrange(2 ** 20)
|
cache_prefix="test_kfetopen_%s" % random.randrange(2 ** 20)
|
||||||
|
|
|
@ -150,6 +150,12 @@ function getErrorsHtml(data) {
|
||||||
content += '<li>Opération invalide sur le compte ' + data['errors']['account'] + '</li>';
|
content += '<li>Opération invalide sur le compte ' + data['errors']['account'] + '</li>';
|
||||||
content += '</ul>';
|
content += '</ul>';
|
||||||
}
|
}
|
||||||
|
if ('frozen' in data['errors']) {
|
||||||
|
content += 'Général';
|
||||||
|
content += '<ul>';
|
||||||
|
content += '<li>Les comptes suivants sont gelés : ' + data['errors']['frozen'].join(", ") + '</li>';
|
||||||
|
content += '</ul>';
|
||||||
|
}
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,6 +212,17 @@ function requestAuth(data, callback, focus_next = null) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function displayErrors(html) {
|
||||||
|
$.alert({
|
||||||
|
title: 'Erreurs',
|
||||||
|
content: html,
|
||||||
|
backgroundDismiss: true,
|
||||||
|
animation: 'top',
|
||||||
|
closeAnimation: 'bottom',
|
||||||
|
keyboardEnabled: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup jquery-confirm
|
* Setup jquery-confirm
|
||||||
|
|
|
@ -32,6 +32,7 @@ Modification de mes informations
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% include 'kfet/form_snippet.html' with form=user_info_form %}
|
{% include 'kfet/form_snippet.html' with form=user_info_form %}
|
||||||
{% include 'kfet/form_snippet.html' with form=account_form %}
|
{% include 'kfet/form_snippet.html' with form=account_form %}
|
||||||
|
{% include 'kfet/form_snippet.html' with form=frozen_form %}
|
||||||
{% include 'kfet/form_snippet.html' with form=group_form %}
|
{% include 'kfet/form_snippet.html' with form=group_form %}
|
||||||
{% include 'kfet/form_snippet.html' with form=pwd_form %}
|
{% include 'kfet/form_snippet.html' with form=pwd_form %}
|
||||||
{% include 'kfet/form_snippet.html' with form=negative_form %}
|
{% include 'kfet/form_snippet.html' with form=negative_form %}
|
||||||
|
|
|
@ -340,21 +340,6 @@ $(document).ready(function() {
|
||||||
$('#id_comment').val('');
|
$('#id_comment').val('');
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----
|
|
||||||
// Errors ajax
|
|
||||||
// -----
|
|
||||||
|
|
||||||
function displayErrors(html) {
|
|
||||||
$.alert({
|
|
||||||
title: 'Erreurs',
|
|
||||||
content: html,
|
|
||||||
backgroundDismiss: true,
|
|
||||||
animation: 'top',
|
|
||||||
closeAnimation: 'bottom',
|
|
||||||
keyboardEnabled: true,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----
|
// -----
|
||||||
// Perform operations
|
// Perform operations
|
||||||
// -----
|
// -----
|
||||||
|
|
|
@ -121,6 +121,9 @@ $(document).ready(function () {
|
||||||
case 403:
|
case 403:
|
||||||
requestAuth(data, performTransfers);
|
requestAuth(data, performTransfers);
|
||||||
break;
|
break;
|
||||||
|
case 400:
|
||||||
|
displayErrors(getErrorsHtml(data));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1926,8 +1926,7 @@ class KPsulPerformOperationsViewTests(ViewTestCaseMixin, TestCase):
|
||||||
["[kfet] Enregistrer des commandes avec commentaires"],
|
["[kfet] Enregistrer des commandes avec commentaires"],
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_group_on_acc_frozen(self):
|
def test_error_on_acc_frozen(self):
|
||||||
user_add_perms(self.users["team"], ["kfet.override_frozen_protection"])
|
|
||||||
self.account.is_frozen = True
|
self.account.is_frozen = True
|
||||||
self.account.save()
|
self.account.save()
|
||||||
|
|
||||||
|
@ -1944,30 +1943,9 @@ class KPsulPerformOperationsViewTests(ViewTestCaseMixin, TestCase):
|
||||||
)
|
)
|
||||||
resp = self.client.post(self.url, data)
|
resp = self.client.post(self.url, data)
|
||||||
|
|
||||||
self._assertResponseOk(resp)
|
self.assertEqual(resp.status_code, 400)
|
||||||
|
|
||||||
def test_invalid_group_on_acc_frozen_requires_perm(self):
|
|
||||||
self.account.is_frozen = True
|
|
||||||
self.account.save()
|
|
||||||
|
|
||||||
data = dict(
|
|
||||||
self.base_post_data,
|
|
||||||
**{
|
|
||||||
"comment": "A comment to explain it",
|
|
||||||
"form-TOTAL_FORMS": "1",
|
|
||||||
"form-0-type": "purchase",
|
|
||||||
"form-0-amount": "",
|
|
||||||
"form-0-article": str(self.article.pk),
|
|
||||||
"form-0-article_nb": "2",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
resp = self.client.post(self.url, data)
|
|
||||||
|
|
||||||
self.assertEqual(resp.status_code, 403)
|
|
||||||
json_data = json.loads(resp.content.decode("utf-8"))
|
json_data = json.loads(resp.content.decode("utf-8"))
|
||||||
self.assertEqual(
|
self.assertEqual(json_data["errors"]["frozen"], [self.account.trigramme])
|
||||||
json_data["errors"]["missing_perms"], ["[kfet] Forcer le gel d'un compte"]
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_invalid_group_checkout(self):
|
def test_invalid_group_checkout(self):
|
||||||
self.checkout.valid_from -= timedelta(days=300)
|
self.checkout.valid_from -= timedelta(days=300)
|
||||||
|
|
|
@ -253,7 +253,10 @@ class ViewTestCaseMixin(TestCaseMixin):
|
||||||
self.register_user(label, user)
|
self.register_user(label, user)
|
||||||
|
|
||||||
if self.auth_user:
|
if self.auth_user:
|
||||||
self.client.force_login(self.users[self.auth_user])
|
self.client.force_login(
|
||||||
|
self.users[self.auth_user],
|
||||||
|
backend="django.contrib.auth.backends.ModelBackend",
|
||||||
|
)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
del self.users_base
|
del self.users_base
|
||||||
|
|
|
@ -38,6 +38,7 @@ from kfet.config import kfet_config
|
||||||
from kfet.decorators import teamkfet_required
|
from kfet.decorators import teamkfet_required
|
||||||
from kfet.forms import (
|
from kfet.forms import (
|
||||||
AccountForm,
|
AccountForm,
|
||||||
|
AccountFrozenForm,
|
||||||
AccountNegativeForm,
|
AccountNegativeForm,
|
||||||
AccountNoTriForm,
|
AccountNoTriForm,
|
||||||
AccountPwdForm,
|
AccountPwdForm,
|
||||||
|
@ -349,10 +350,11 @@ def account_update(request, trigramme):
|
||||||
return HttpResponseForbidden
|
return HttpResponseForbidden
|
||||||
|
|
||||||
user_info_form = UserInfoForm(instance=account.user)
|
user_info_form = UserInfoForm(instance=account.user)
|
||||||
|
|
||||||
group_form = UserGroupForm(instance=account.user)
|
|
||||||
account_form = AccountForm(instance=account)
|
account_form = AccountForm(instance=account)
|
||||||
|
group_form = UserGroupForm(instance=account.user)
|
||||||
|
frozen_form = AccountFrozenForm(request.POST, instance=account)
|
||||||
pwd_form = AccountPwdForm()
|
pwd_form = AccountPwdForm()
|
||||||
|
|
||||||
if hasattr(account, "negative"):
|
if hasattr(account, "negative"):
|
||||||
negative_form = AccountNegativeForm(instance=account.negative)
|
negative_form = AccountNegativeForm(instance=account.negative)
|
||||||
else:
|
else:
|
||||||
|
@ -362,6 +364,7 @@ def account_update(request, trigramme):
|
||||||
self_update = request.user == account.user
|
self_update = request.user == account.user
|
||||||
account_form = AccountForm(request.POST, instance=account)
|
account_form = AccountForm(request.POST, instance=account)
|
||||||
group_form = UserGroupForm(request.POST, instance=account.user)
|
group_form = UserGroupForm(request.POST, instance=account.user)
|
||||||
|
frozen_form = AccountFrozenForm(request.POST, instance=account)
|
||||||
pwd_form = AccountPwdForm(request.POST, account=account)
|
pwd_form = AccountPwdForm(request.POST, account=account)
|
||||||
|
|
||||||
forms = []
|
forms = []
|
||||||
|
@ -374,6 +377,7 @@ def account_update(request, trigramme):
|
||||||
|
|
||||||
if request.user.has_perm("kfet.manage_perms"):
|
if request.user.has_perm("kfet.manage_perms"):
|
||||||
forms.append(group_form)
|
forms.append(group_form)
|
||||||
|
forms.append(frozen_form)
|
||||||
elif group_form.has_changed():
|
elif group_form.has_changed():
|
||||||
warnings.append("statut d'équipe")
|
warnings.append("statut d'équipe")
|
||||||
|
|
||||||
|
@ -431,6 +435,7 @@ def account_update(request, trigramme):
|
||||||
"user_info_form": user_info_form,
|
"user_info_form": user_info_form,
|
||||||
"account": account,
|
"account": account,
|
||||||
"account_form": account_form,
|
"account_form": account_form,
|
||||||
|
"frozen_form": frozen_form,
|
||||||
"group_form": group_form,
|
"group_form": group_form,
|
||||||
"negative_form": negative_form,
|
"negative_form": negative_form,
|
||||||
"pwd_form": pwd_form,
|
"pwd_form": pwd_form,
|
||||||
|
@ -1051,6 +1056,9 @@ def kpsul_perform_operations(request):
|
||||||
)
|
)
|
||||||
need_comment = operationgroup.on_acc.need_comment
|
need_comment = operationgroup.on_acc.need_comment
|
||||||
|
|
||||||
|
if operationgroup.on_acc.is_frozen:
|
||||||
|
data["errors"]["frozen"] = [operationgroup.on_acc.trigramme]
|
||||||
|
|
||||||
# Filling data of each operations
|
# Filling data of each operations
|
||||||
# + operationgroup + calculating other stuffs
|
# + operationgroup + calculating other stuffs
|
||||||
for operation in operations:
|
for operation in operations:
|
||||||
|
@ -1672,7 +1680,11 @@ def perform_transfers(request):
|
||||||
|
|
||||||
negative_accounts = []
|
negative_accounts = []
|
||||||
# Checking if ok on all accounts
|
# Checking if ok on all accounts
|
||||||
|
frozen = set()
|
||||||
for account in to_accounts_balances:
|
for account in to_accounts_balances:
|
||||||
|
if account.is_frozen:
|
||||||
|
frozen.add(account.trigramme)
|
||||||
|
|
||||||
(perms, stop) = account.perms_to_perform_operation(
|
(perms, stop) = account.perms_to_perform_operation(
|
||||||
amount=to_accounts_balances[account]
|
amount=to_accounts_balances[account]
|
||||||
)
|
)
|
||||||
|
@ -1681,6 +1693,10 @@ def perform_transfers(request):
|
||||||
if stop:
|
if stop:
|
||||||
negative_accounts.append(account.trigramme)
|
negative_accounts.append(account.trigramme)
|
||||||
|
|
||||||
|
if len(frozen):
|
||||||
|
data["errors"]["frozen"] = list(frozen)
|
||||||
|
return JsonResponse(data, status=400)
|
||||||
|
|
||||||
if stop_all or not request.user.has_perms(required_perms):
|
if stop_all or not request.user.has_perms(required_perms):
|
||||||
missing_perms = get_missing_perms(required_perms, request.user)
|
missing_perms = get_missing_perms(required_perms, request.user)
|
||||||
if missing_perms:
|
if missing_perms:
|
||||||
|
|
|
@ -77,7 +77,9 @@ class PetitCoursInscriptionViewTestCase(ViewTestCaseMixin, TestCase):
|
||||||
self.subject2 = create_petitcours_subject(name="Matière 2")
|
self.subject2 = create_petitcours_subject(name="Matière 2")
|
||||||
|
|
||||||
def test_get_forbidden_user_not_cof(self):
|
def test_get_forbidden_user_not_cof(self):
|
||||||
self.client.force_login(self.users["user"])
|
self.client.force_login(
|
||||||
|
self.users["user"], backend="django.contrib.auth.backends.ModelBackend"
|
||||||
|
)
|
||||||
resp = self.client.get(self.url)
|
resp = self.client.get(self.url)
|
||||||
self.assertRedirects(resp, reverse("cof-denied"))
|
self.assertRedirects(resp, reverse("cof-denied"))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue