X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-shop-bot.git/blobdiff_plain/eded5d366f5bb00ed4b01d90f58a8856fb37a377..fdcabcf10a4e2b3f66c17a306db023868d24fb4f:/matrix_shop_bot/db.py diff --git a/matrix_shop_bot/db.py b/matrix_shop_bot/db.py index 464e8f1..367cbcf 100644 --- a/matrix_shop_bot/db.py +++ b/matrix_shop_bot/db.py @@ -31,7 +31,10 @@ class Item(SQLModel, table=True): stores: list["Store"] = Relationship(back_populates="shopping_list", link_model=ItemStoreLink) purchase_date: dt | None = Field(default=None) def __str__(self): - return f'{self.name} (#{self.id})' + if(self.purchase_date): + return f'- [x] {self.name} (#{self.id})' + else: + return f'- [ ] {self.name} (#{self.id})' class ItemZone(SQLModel, table=True): '''Where an item is usually found. @@ -42,11 +45,38 @@ class ItemZone(SQLModel, table=True): name: str = Field(default=None, unique=True) # milk zone: str = Field(default=None, unique=False) # dairy section - class PreferStore(SQLModel, table=True): '''Tracks which store we are shopping at, at the moment.''' store_id: int | None = Field(default=None, foreign_key="store.id", primary_key=True) +def _get_item_zone(item_name, session) -> str: + zone = session.exec(select(ItemZone).where(ItemZone.name == item_name)).first() + if zone: + return zone.zone + return 'No Zone Assigned' + +def _get_pretty_shopping_list(store_id, session) -> List[str]: + store = _get_with_id(Store, store_id) + results = [] + results.append(f' ## {store.name}') + items = store.shopping_list + if not items: + results.append(f'-- Nothing to shop for at {store.name} --') + + zones = {} + + for item in items: + zone = _get_item_zone(item.name, session) + if not zone in zones: + zones[zone] = [] + else: + zones[zone].append(str(item)) + for zone in zones: + results.append(f' ### {zone}') + for item in zones[zone]: + results.append(item) + return results + class Store(SQLModel, table=True): '''A place to shop at.''' id: int | None = Field(default=None, primary_key=True) @@ -56,20 +86,6 @@ class Store(SQLModel, table=True): def __str__(self): return f'{self.name} (#{self.id})' - def get_pretty_shopping_list(self) -> List[str]: - results = [] - results.append(f' ## {self.name}') - items = self.shopping_list - if not items: - results.append(f'-- Nothing to shop for at {self.name} --') - else: - for item in items: - if(item.purchase_date): - results.append(f' - [x] {item}') - else: - results.append(f' - [ ] {item}') - return results - class PurchaseRecord(SQLModel, table=True): '''Tracks when and where items were purchased.''' @@ -221,7 +237,7 @@ class Data(): session.delete(item) session.commit() - results = store.get_pretty_shopping_list() + results = _get_pretty_shopping_list(store.id, session) return results def get_stores(self): @@ -245,7 +261,7 @@ class Data(): with Session(self.engine) as session: store = session.exec(_get_with_id(Store, store_id)).first() if store: - return store.get_pretty_shopping_list() + return _get_pretty_shopping_list(store.id, session) return [f'Last shopping list store not found.'] def get_shopping_list(self, store_name) -> List[str]: @@ -254,7 +270,7 @@ class Data(): store = session.exec(_get_with_name(Store, store_name)).first() if not store: return [f'Store {store_name} not found.'] - results = store.get_pretty_shopping_list() + results = _get_pretty_shopping_list(store.id, session) self._set_pref_store_id(store.id) return results