diff --git a/.gitignore b/.gitignore index 641a18d..26bf605 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ result result-* - +**/__pycache__ +dibbler.egg-info dist test.db -.ruff_cache \ No newline at end of file +.ruff_cache diff --git a/dibbler/lib/statistikkHelpers.py b/dibbler/lib/statistikkHelpers.py index 80ea886..0441aec 100644 --- a/dibbler/lib/statistikkHelpers.py +++ b/dibbler/lib/statistikkHelpers.py @@ -76,12 +76,8 @@ class Database: personDatoVerdi = defaultdict(list) # dict->array personUkedagVerdi = defaultdict(list) # for global - personPosTransactions = ( - {} - ) # personPosTransactions[trygvrad] == 100 #trygvrad har lagt 100kr i boksen - personNegTransactions = ( - {} - ) # personNegTransactions[trygvrad» == 70 #trygvrad har tatt 70kr fra boksen + personPosTransactions = {} # personPosTransactions[trygvrad] == 100 #trygvrad har lagt 100kr i boksen + personNegTransactions = {} # personNegTransactions[trygvrad» == 70 #trygvrad har tatt 70kr fra boksen globalVareAntall = {} # globalVareAntall[Oreo] == 3 globalVareVerdi = {} # globalVareVerdi[Oreo] == 30 #[kr] globalPersonAntall = {} # globalPersonAntall[trygvrad] == 3 diff --git a/dibbler/main.py b/dibbler/main.py index bd0c424..f7c459f 100644 --- a/dibbler/main.py +++ b/dibbler/main.py @@ -20,6 +20,7 @@ subparsers = parser.add_subparsers( subparsers.add_parser("loop", help="Run the dibbler loop") subparsers.add_parser("create-db", help="Create the database") subparsers.add_parser("slabbedasker", help="Find out who is slabbedasker") +subparsers.add_parser("seed-data", help="Fill with mock data") def main(): @@ -41,6 +42,11 @@ def main(): slabbedasker.main() + elif args.subcommand == "seed-data": + import dibbler.subcommands.seed_test_data as seed_test_data + + seed_test_data.main() + if __name__ == "__main__": main() diff --git a/dibbler/menus/buymenu.py b/dibbler/menus/buymenu.py index acb534e..05be7f9 100644 --- a/dibbler/menus/buymenu.py +++ b/dibbler/menus/buymenu.py @@ -180,7 +180,7 @@ When finished, write an empty line to confirm the purchase.\n""" print(f"User {t.user.name}'s credit is now {t.user.credit:d} kr") if t.user.credit < config.getint("limits", "low_credit_warning_limit"): print( - f'USER {t.user.name} HAS LOWER CREDIT THAN {config.getint("limits", "low_credit_warning_limit"):d},', + f"USER {t.user.name} HAS LOWER CREDIT THAN {config.getint('limits', 'low_credit_warning_limit'):d},", "AND SHOULD CONSIDER PUTTING SOME MONEY IN THE BOX.", ) diff --git a/dibbler/models/__init__.py b/dibbler/models/__init__.py index 20999e9..9cd0325 100644 --- a/dibbler/models/__init__.py +++ b/dibbler/models/__init__.py @@ -1,11 +1,11 @@ __all__ = [ - 'Base', - 'Product', - 'Purchase', - 'PurchaseEntry', - 'Transaction', - 'User', - 'UserProducts', + "Base", + "Product", + "Purchase", + "PurchaseEntry", + "Transaction", + "User", + "UserProducts", ] from .Base import Base diff --git a/dibbler/subcommands/seed_test_data.py b/dibbler/subcommands/seed_test_data.py new file mode 100644 index 0000000..07454ea --- /dev/null +++ b/dibbler/subcommands/seed_test_data.py @@ -0,0 +1,48 @@ +import json +from dibbler.db import Session + +from pathlib import Path + +from dibbler.models.Product import Product + +from dibbler.models.User import User + +JSON_FILE = Path(__file__).parent.parent.parent / "mock_data.json" + + +def clear_db(session): + session.query(Product).delete() + session.query(User).delete() + session.commit() + + +def main(): + session = Session() + clear_db(session) + product_items = [] + user_items = [] + + with open(JSON_FILE) as f: + json_obj = json.load(f) + + for product in json_obj["products"]: + product_item = Product( + bar_code=product["bar_code"], + name=product["name"], + price=product["price"], + stock=product["stock"], + ) + product_items.append(product_item) + + for user in json_obj["users"]: + user_item = User( + name=user["name"], + card=user["card"], + rfid=user["rfid"], + credit=user["credit"], + ) + user_items.append(user_item) + + session.add_all(product_items) + session.add_all(user_items) + session.commit() diff --git a/mock_data.json b/mock_data.json new file mode 100644 index 0000000..7e36703 --- /dev/null +++ b/mock_data.json @@ -0,0 +1,76 @@ +{ + "products": [ + { + "product_id": 1, + "bar_code": "1234567890123", + "name": "Wireless Mouse", + "price": 2999, + "stock": 150, + "hidden": false + }, + { + "product_id": 2, + "bar_code": "9876543210987", + "name": "Mechanical Keyboard", + "price": 5999, + "stock": 75, + "hidden": false + }, + { + "product_id": 3, + "bar_code": "1112223334445", + "name": "Gaming Monitor", + "price": 19999, + "stock": 20, + "hidden": false + }, + { + "product_id": 4, + "bar_code": "5556667778889", + "name": "USB-C Docking Station", + "price": 8999, + "stock": 50, + "hidden": true + }, + { + "product_id": 5, + "bar_code": "4445556667771", + "name": "Noise Cancelling Headphones", + "price": 12999, + "stock": 30, + "hidden": true + } + ], + "users": [ + { + "name": "Albert", + "credit": 42069, + "card": "NTU12345678", + "rfid": "a1b2c3d4e5" + }, + { + "name": "lorem", + "credit": 2000, + "card": "9876543210", + "rfid": "f6e7d8c9b0" + }, + { + "name": "ibsum", + "credit": 1000, + "card": "11122233", + "rfid": "" + }, + { + "name": "dave", + "credit": 7500, + "card": "NTU56789012", + "rfid": "1234abcd5678" + }, + { + "name": "eve", + "credit": 3000, + "card": null, + "rfid": "deadbeef1234" + } + ] +} diff --git a/nix/shell.nix b/nix/shell.nix index fadb097..7c93f0f 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -2,11 +2,13 @@ mkShell, python, ruff, + uv, }: mkShell { packages = [ ruff + uv (python.withPackages (ps: with ps; [ brother-ql matplotlib