logger = logging.getLogger(__name__)
-logging.basicConfig(filename=f'{MODULE}.log', encoding='utf-8', level=logging.DEBUG)
class ItemStoreLink(SQLModel, table=True):
item_id: int | None = Field(default=None, foreign_key="item.id", primary_key=True)
return f'{self.name} (#{self.id})'
# May get used later...
-#class PurchaseRecord(SQLModel, table=True):
-# id: int | None = Field(default=None, primary_key=True)
-# name: str = Field(default=None, unique=True)
-# price: Decimal | None = Field(decimal_places=2)
-# store: Store = Relationship(back_populates="purchase_history")
-# purchase_date: dt | None = Field(default=None)
+class PurchaseRecord(SQLModel, table=True):
+ id: int | None = Field(default=None, primary_key=True)
+ name: str = Field(default=None)
+ price: Decimal | None = Field(decimal_places=2)
+ store: str | None = Field(default=None)
+ purchase_date: dt | None = Field(default=None)
+ def __str__(self):
+ date = self.purchase_date.strftime(DATE_FORMAT)
+ return f'{self.name} at {self.store} on {date}'
def _get_with_id(cls, item_id):
return select(cls).where(cls.id == item_id)
db_file = os.path.join(os.environ.get('MATRIX_DATA_DIR', ''), f'{MODULE}.db')
self.file = db_file
+ logger.debug(f'Shop bot is using db file {self.file}')
self.engine = self.get_engine()
self.last_store_id = None
pass # Already assigned
return ['Success']
+ def list_purchases(self, store_name):
+ with Session(self.engine) as session:
+ cmd = select(PurchaseRecord).where(PurchaseRecord.store == store_name)
+ records = session.exec(cmd).all()
+ return records
def purchase_items(self, item_ids):
results = []
with Session(self.engine) as session:
+ # Mark items as purchased
for item_id in item_ids.split(' '):
item = session.exec(_get_with_id(Item, item_id)).first()
if item:
item.purchase_date = dt.today()
- results.append(str(item))
+
+ # Track purchase history (locally only!)
+ # to generate recommended shopping lists
+ record = PurchaseRecord()
+ record.name = item.name
+ record.price = item.price
+ record.purchase_date = item.purchase_date
+
+ shopping_at = self._get_pref_store_id() # We bought it here
+ cmd = select(Store).where(Store.id == shopping_at)
+ store = session.exec(cmd).one()
+ record.store = store.name
+ session.add(record)
+
+ results.append(str(record))
+ # results.append(str(item))
+
session.commit()
return results
- def purchase_item(self, item_id):
- with Session(self.engine) as session:
- item = session.exec(_get_with_id(Item, item_id)).first()
- item.purchase_date = dt.today()
- session.commit()
- return ['Success']
def clear_list(self, store_id, clear_all=False):
with Session(self.engine) as session: