memberPlumbing/sqlExport.py

67 lines
2.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
from datetime import datetime
from common import membershipworks
from lib.mw_models import Label, Member, MemberLabel, Transaction, database
@database.atomic()
def main():
print("Creating tables")
database.create_tables([Label, Member, MemberLabel, Transaction])
print("Updating labels")
labels = membershipworks._parse_flags()["labels"]
Label.insert_many(
[{"label_id": v, "label": k} for k, v in labels.items()]
).on_conflict(action="update", preserve=[Label.label]).execute()
print("Getting/Updating members...")
members = membershipworks.get_all_members()
for m in members:
# replace flags by booleans
for flag in [dek["lbl"] for dek in membershipworks.org_info["dek"]]:
if flag in m:
m[flag] = m[flag] == flag
for field_id, field in membershipworks._all_fields().items():
# convert checkboxes to real booleans
if field.get("typ") == 8 and field["lbl"] in m: # check box
m[field["lbl"]] = True if m[field["lbl"]] == "Y" else False
for member in members:
# create/update member
Member.from_csv_dict(member).magic_save()
# update member's labels
for label, label_id in membershipworks._parse_flags()["labels"].items():
ml = MemberLabel(uid=member["Account ID"], label_id=label_id)
if member[label]:
ml.magic_save()
else:
ml.delete_instance()
print("Getting/Updating transactions...")
now = datetime.now()
start_date = datetime(2010, 1, 1)
transactions_csv = membershipworks.get_transactions(start_date, now)
transactions_json = membershipworks.get_transactions(start_date, now, json=True)
# this is terrible, but as long as the dates are the same, should be fiiiine
transactions = [{**j, **v} for j, v in zip(transactions_csv, transactions_json)]
assert all(
[
t["Account ID"] == t.get("uid", "") and t["Payment ID"] == t.get("sid", "")
for t in transactions
]
)
for transaction in transactions:
Transaction.from_csv_dict(transaction).magic_save()
# TODO: folders, levels, addons
if __name__ == "__main__":
main()