Setup deleted account
Pour pouvoir supprimer un compte, on crée un compte dummy qui a pour but de recevoir les objets non supprimables (caisses, transferts/opérations pour statistiques, etc.). Lors de la délétion d'un compte, tout est transféré sur le dummy, qui est créé via migration.
This commit is contained in:
parent
85b1e974ff
commit
63fff6ca7c
4 changed files with 159 additions and 15 deletions
|
@ -1 +1,3 @@
|
|||
default_app_config = "kfet.apps.KFetConfig"
|
||||
KFET_DELETED_TRIGRAMME = "☠☠☠"
|
||||
KFET_DELETED_USERNAME = "kfet_deleted_user"
|
||||
|
|
32
kfet/migrations/0067_deleted_account.py
Normal file
32
kfet/migrations/0067_deleted_account.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Generated by Django 2.2 on 2019-05-23 13:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
from kfet import KFET_DELETED_TRIGRAMME, KFET_DELETED_USERNAME
|
||||
|
||||
|
||||
def setup_kfet_deleted_user(apps, schema_editor):
|
||||
"""
|
||||
Setup models instances for the kfet deleted account.
|
||||
|
||||
Username and trigramme are retrieved from kfet.__init__ module.
|
||||
Other data are registered here.
|
||||
"""
|
||||
User = apps.get_model("auth", "User")
|
||||
CofProfile = apps.get_model("gestioncof", "CofProfile")
|
||||
Account = apps.get_model("kfet", "Account")
|
||||
|
||||
user, _ = User.objects.update_or_create(
|
||||
username=KFET_DELETED_USERNAME, defaults={"first_name": "Compte K-Fêt supprimé"}
|
||||
)
|
||||
profile, _ = CofProfile.objects.update_or_create(user=user)
|
||||
account, _ = Account.objects.update_or_create(
|
||||
cofprofile=profile, defaults={"trigramme": KFET_DELETED_TRIGRAMME}
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [("kfet", "0066_on_delete_actions")]
|
||||
|
||||
operations = [migrations.RunPython(setup_kfet_deleted_user)]
|
103
kfet/migrations/0068_on_delete_account.py
Normal file
103
kfet/migrations/0068_on_delete_account.py
Normal file
|
@ -0,0 +1,103 @@
|
|||
# Generated by Django 2.2 on 2019-05-23 16:17
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
import kfet.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [("kfet", "0067_deleted_account")]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="checkout",
|
||||
name="created_by",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="+",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="checkoutstatement",
|
||||
name="by",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="+",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="inventory",
|
||||
name="by",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="+",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="operation",
|
||||
name="addcost_for",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
default=None,
|
||||
null=True,
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="addcosts",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="operation",
|
||||
name="canceled_by",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
default=None,
|
||||
null=True,
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="+",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="operationgroup",
|
||||
name="on_acc",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="opesgroup",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="transfer",
|
||||
name="canceled_by",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
default=None,
|
||||
null=True,
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="+",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="transfer",
|
||||
name="from_acc",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="transfers_from",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="transfer",
|
||||
name="to_acc",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.SET(kfet.models.get_deleted_account),
|
||||
related_name="transfers_to",
|
||||
to="kfet.Account",
|
||||
),
|
||||
),
|
||||
]
|
|
@ -12,6 +12,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||
|
||||
from gestioncof.models import CofProfile
|
||||
|
||||
from . import KFET_DELETED_TRIGRAMME
|
||||
from .auth import KFET_GENERIC_TRIGRAMME
|
||||
from .auth.models import GenericTeamToken # noqa
|
||||
from .config import kfet_config
|
||||
|
@ -267,12 +268,6 @@ class Account(models.Model):
|
|||
|
||||
self.password = hash_password(clear_password)
|
||||
|
||||
# Surcharge de delete
|
||||
# Pas de suppression possible
|
||||
# Cas à régler plus tard
|
||||
def delete(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def update_negative(self):
|
||||
if self.real_balance < 0:
|
||||
if hasattr(self, "negative") and not self.negative.start:
|
||||
|
@ -299,6 +294,10 @@ class Account(models.Model):
|
|||
self.trigramme = trigramme
|
||||
|
||||
|
||||
def get_deleted_account():
|
||||
return Account.objects.get(trigramme=KFET_DELETED_TRIGRAMME)
|
||||
|
||||
|
||||
class AccountNegativeManager(models.Manager):
|
||||
"""Manager for AccountNegative model."""
|
||||
|
||||
|
@ -350,7 +349,9 @@ class CheckoutQuerySet(models.QuerySet):
|
|||
|
||||
|
||||
class Checkout(models.Model):
|
||||
created_by = models.ForeignKey(Account, on_delete=models.PROTECT, related_name="+")
|
||||
created_by = models.ForeignKey(
|
||||
Account, on_delete=models.SET(get_deleted_account), related_name="+"
|
||||
)
|
||||
name = models.CharField(max_length=45)
|
||||
valid_from = models.DateTimeField()
|
||||
valid_to = models.DateTimeField()
|
||||
|
@ -385,7 +386,9 @@ class Checkout(models.Model):
|
|||
|
||||
|
||||
class CheckoutStatement(models.Model):
|
||||
by = models.ForeignKey(Account, on_delete=models.PROTECT, related_name="+")
|
||||
by = models.ForeignKey(
|
||||
Account, on_delete=models.SET(get_deleted_account), related_name="+"
|
||||
)
|
||||
checkout = models.ForeignKey(
|
||||
Checkout, on_delete=models.CASCADE, related_name="statements"
|
||||
)
|
||||
|
@ -520,7 +523,9 @@ class Inventory(models.Model):
|
|||
articles = models.ManyToManyField(
|
||||
Article, through="InventoryArticle", related_name="inventories"
|
||||
)
|
||||
by = models.ForeignKey(Account, on_delete=models.PROTECT, related_name="+")
|
||||
by = models.ForeignKey(
|
||||
Account, on_delete=models.SET(get_deleted_account), related_name="+"
|
||||
)
|
||||
at = models.DateTimeField(auto_now_add=True)
|
||||
# Optional
|
||||
order = models.OneToOneField(
|
||||
|
@ -626,16 +631,18 @@ class Transfer(models.Model):
|
|||
TransferGroup, on_delete=models.PROTECT, related_name="transfers"
|
||||
)
|
||||
from_acc = models.ForeignKey(
|
||||
Account, on_delete=models.PROTECT, related_name="transfers_from"
|
||||
Account,
|
||||
on_delete=models.SET(get_deleted_account),
|
||||
related_name="transfers_from",
|
||||
)
|
||||
to_acc = models.ForeignKey(
|
||||
Account, on_delete=models.PROTECT, related_name="transfers_to"
|
||||
Account, on_delete=models.SET(get_deleted_account), related_name="transfers_to"
|
||||
)
|
||||
amount = models.DecimalField(max_digits=6, decimal_places=2)
|
||||
# Optional
|
||||
canceled_by = models.ForeignKey(
|
||||
Account,
|
||||
on_delete=models.PROTECT,
|
||||
on_delete=models.SET(get_deleted_account),
|
||||
null=True,
|
||||
blank=True,
|
||||
default=None,
|
||||
|
@ -649,7 +656,7 @@ class Transfer(models.Model):
|
|||
|
||||
class OperationGroup(models.Model):
|
||||
on_acc = models.ForeignKey(
|
||||
Account, on_delete=models.PROTECT, related_name="opesgroup"
|
||||
Account, on_delete=models.SET(get_deleted_account), related_name="opesgroup"
|
||||
)
|
||||
checkout = models.ForeignKey(
|
||||
Checkout, on_delete=models.PROTECT, related_name="opesgroup"
|
||||
|
@ -706,7 +713,7 @@ class Operation(models.Model):
|
|||
article_nb = models.PositiveSmallIntegerField(blank=True, null=True, default=None)
|
||||
canceled_by = models.ForeignKey(
|
||||
Account,
|
||||
on_delete=models.PROTECT,
|
||||
on_delete=models.SET(get_deleted_account),
|
||||
related_name="+",
|
||||
blank=True,
|
||||
null=True,
|
||||
|
@ -715,7 +722,7 @@ class Operation(models.Model):
|
|||
canceled_at = models.DateTimeField(blank=True, null=True, default=None)
|
||||
addcost_for = models.ForeignKey(
|
||||
Account,
|
||||
on_delete=models.PROTECT,
|
||||
on_delete=models.SET(get_deleted_account),
|
||||
related_name="addcosts",
|
||||
blank=True,
|
||||
null=True,
|
||||
|
|
Loading…
Reference in a new issue