Compare commits

..

3 Commits

Author SHA1 Message Date
Yohann D'ANELLO 85568dd4f5 Import remittances 2020-07-26 01:01:17 +02:00
Yohann D'ANELLO 43734b9182 Scripts are not executable 2020-07-25 21:57:46 +02:00
Yohann D'ANELLO 441c8b9659 Fix linters 2020-07-25 17:42:32 +02:00
7 changed files with 81 additions and 12 deletions

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
import json import json
import time import time

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
import psycopg2 as pg import psycopg2 as pg
import psycopg2.extras as pge import psycopg2.extras as pge

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
import psycopg2 as pg import psycopg2 as pg
import psycopg2.extras as pge import psycopg2.extras as pge

View File

@ -1,4 +1,6 @@
#!/usr/env/bin python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
import subprocess import subprocess
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand

View File

@ -1,4 +1,6 @@
#!/usr/bin/env python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
import re import re
import psycopg2 as pg import psycopg2 as pg
import psycopg2.extras as pge import psycopg2.extras as pge
@ -21,8 +23,12 @@ from note.models import Note, NoteClub
from activity.models import Guest, GuestTransaction, Entry from activity.models import Guest, GuestTransaction, Entry
from member.models import Membership from member.models import Membership
from treasury.models import Remittance, SpecialTransactionProxy
from ._import_utils import ImportCommand, BulkCreateManager, timed from ._import_utils import ImportCommand, BulkCreateManager, timed
MAP_TRANSACTION = dict()
MAP_REMITTANCE = dict()
# from member/fixtures/initial # from member/fixtures/initial
BDE_PK = 1 BDE_PK = 1
KFET_PK = 2 KFET_PK = 2
@ -157,7 +163,7 @@ class Command(ImportCommand):
).first().pk ).first().pk
child_dict["entry_id"] = entry_id child_dict["entry_id"] = entry_id
else: else:
raise(f"Guest not Found {row['id']} {first_name}, last_name") raise Exception(f"Guest not Found {row['id']} first_name, last_name")
return obj_dict, child_dict, GuestTransaction return obj_dict, child_dict, GuestTransaction
@ -166,7 +172,7 @@ class Command(ImportCommand):
def import_transaction(self, cur, chunk_size, idmin): def import_transaction(self, cur, chunk_size, idmin):
bulk_mgr = BulkCreateManager(chunk_size=chunk_size) bulk_mgr = BulkCreateManager(chunk_size=chunk_size)
cur.execute( cur.execute(
f"SELECT t.date AS transac_date, t.type, t.emetteur,\ f"SELECT t.id, t.date AS transac_date, t.type, t.emetteur,\
t.destinataire,t.quantite, t.montant, t.description,\ t.destinataire,t.quantite, t.montant, t.description,\
t.valide, t.cantinvalidate, t.categorie, \ t.valide, t.cantinvalidate, t.categorie, \
a.idbde, a.annee, a.wei, a.date AS adh_date, a.section\ a.idbde, a.annee, a.wei, a.date AS adh_date, a.section\
@ -179,6 +185,9 @@ class Command(ImportCommand):
pk_transaction = 1 pk_transaction = 1
for idx, row in enumerate(cur): for idx, row in enumerate(cur):
self.update_line(idx, n, row["description"]) self.update_line(idx, n, row["description"])
MAP_TRANSACTION[row["id"]] = pk_transaction
try: try:
date = make_aware(row["transac_date"]) date = make_aware(row["transac_date"])
except (pytz.NonExistentTimeError, pytz.AmbiguousTimeError): except (pytz.NonExistentTimeError, pytz.AmbiguousTimeError):
@ -225,7 +234,8 @@ class Command(ImportCommand):
} }
pk_membership += 1 pk_membership += 1
pk_transaction += 1 pk_transaction += 1
obj_dict, child_dict, child_transaction = self._membership_transaction(row, obj_dict, child_dict, pk_membership) obj_dict, child_dict, child_transaction =\
self._membership_transaction(row, obj_dict, child_dict, pk_membership)
# Kfet membership # Kfet membership
# BDE Membership # BDE Membership
obj_dict["pk"] = pk_transaction obj_dict["pk"] = pk_transaction
@ -270,6 +280,51 @@ class Command(ImportCommand):
pk_transaction += 1 pk_transaction += 1
bulk_mgr.done() bulk_mgr.done()
@timed
@transaction.atomic
def import_remittances(self, cur, chunk_size):
bulk_mgr = BulkCreateManager(chunk_size=chunk_size)
cur.execute("SELECT id, date, commentaire, close FROM remises WHERE id = 105 ORDER BY id;")
n = cur.rowcount
pk_remittance = 1
for idx, row in enumerate(cur):
self.update_line(idx, n, row["commentaire"])
MAP_REMITTANCE[row["id"]] = pk_remittance
remittance_dict = {
"pk": pk_remittance,
"date": make_aware(row["date"]),
"remittance_type_id": 1, # Only Bank checks are supported in NK15
"comment": row["commentaire"],
"closed": row["close"],
}
bulk_mgr.add(Remittance(**remittance_dict))
pk_remittance += 1
bulk_mgr.done()
@timed
def import_checks(self, cur):
cur.execute("SELECT id, nom, prenom, banque, idtransaction, idremise "
"FROM cheques WHERE idremise = 105 ORDER BY id;")
n = cur.rowcount
for idx, row in enumerate(cur):
self.update_line(idx, n, row["nom"])
tr = SpecialTransactionProxy.objects.get(transaction__id=MAP_TRANSACTION[row["idtransaction"]])
tr.remittance_id = MAP_REMITTANCE[row["idremise"]]
tr.save()
tr = tr.transaction
tr.last_name = row["nom"]
tr.first_name = row["prenom"]
tr.bank = row["banque"]
tr.save()
@timed @timed
def set_roles(self): def set_roles(self):
bulk_mgr = BulkCreateManager(chunk_size=10000) bulk_mgr = BulkCreateManager(chunk_size=10000)
@ -297,3 +352,5 @@ class Command(ImportCommand):
self.import_buttons(cur, kwargs["chunk"], kwargs["buttons"]) self.import_buttons(cur, kwargs["chunk"], kwargs["buttons"])
self.import_transaction(cur, kwargs["chunk"], kwargs["transactions"]) self.import_transaction(cur, kwargs["chunk"], kwargs["transactions"])
self.set_roles() self.set_roles()
self.import_remittances(cur, kwargs["chunk"])
self.import_checks(cur)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
from datetime import timedelta from datetime import timedelta
@ -18,10 +19,15 @@ class Command(BaseCommand):
return parser return parser
def handle(self, *args, **kwargs): def handle(self, *args, **kwargs):
queryset = RecurrentTransaction.objects.filter(template__display=True, created_at__gte=timezone.now() - timedelta(days=30)).values("template").annotate(transaction_count=Count("template")).order_by("-transaction_count")[:10] queryset = RecurrentTransaction.objects.filter(
template__display=True,
valid=True,
created_at__gte=timezone.now() - timedelta(days=30),
).values("template").annotate(transaction_count=Count("template")).order_by("-transaction_count")[:10]
for d in queryset.all(): for d in queryset.all():
button_id = d["template"] button_id = d["template"]
button = TransactionTemplate.objects.get(pk=button_id) button = TransactionTemplate.objects.get(pk=button_id)
self.stdout.write(self.style.WARNING("Highlight button {name} ({count:d} transactions)...".format(name=button.name, count=d["transaction_count"]))) self.stdout.write(self.style.WARNING("Highlight button {name} ({count:d} transactions)..."
.format(name=button.name, count=d["transaction_count"])))
button.highlighted = True button.highlighted = True
button.save() button.save()

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.apps import apps from django.apps import apps