Source code for ResearchNotes.database_transactions.inventory

"""All database transactions for the inventory go here"""

from flask_sqlalchemy import SQLAlchemy

from ResearchNotes.database import Items, ItemType, ItemsCheckOut, ItemsTemplate, User

from .basics import Transaction


[docs]def create_itemtype(database: SQLAlchemy, itype_info: dict) -> None: """ Creates an item type in the database. Parameters ---------- database : SQLAlchemy The database/session object to write to. itype_info: dict Information needed to initialize a Measurement Type object. Returns ------- None. """ new_itype = ItemType( name=itype_info["name"], group_id=itype_info["group_id"], ) with Transaction(database) as db_session: db_session.add(new_itype)
[docs]def create_item(database: SQLAlchemy, info_dict: dict) -> int: """ Database transaction to create a new item record. Parameters ---------- database : SQLAlchemy Database record to write to (table) info_dict :dict The information of the record to create. Returns ------- int ID of te newly created item. """ new_item = Items( identifier=info_dict["identifier"], name=info_dict["name"], description=info_dict["description"], amount=info_dict["amount"], unite=info_dict["unite"], amount_is_int=info_dict["amount_is_int"], available=info_dict["available"], location_id=info_dict["location_id"], creator=info_dict["creator"], group_id=info_dict["group_id"], ) if info_dict["itype_id"] == 0: new_item.itype_id = None else: new_item.itype_id = info_dict["itype_id"] if info_dict.get("location_id"): new_item.location_id = info_dict["location_id"] else: new_item.location_id = 1 if info_dict.get("vendor"): new_item.vendor = info_dict["vendor"] if info_dict.get("catalog"): new_item.catalog = info_dict["catalog"] with Transaction(database) as db_session: db_session.add(new_item) with Transaction(database) as db_session: db_session.refresh(new_item) return new_item.item_id
[docs]def update_item(database: SQLAlchemy, item: Items, info_dict: dict) -> None: """ Database transaction to update an itme record. Parameters ---------- database :SQLAlchemy datebase object to find tale of item. item : Items Table entry to update info_dict : dict Information with the updated information. Returns ------- None """ with Transaction(database): item.identifier = info_dict["identifier"] item.name = info_dict["name"] item.description = info_dict["description"] item.amount = info_dict["amount"] item.unite = info_dict["unite"] item.amount_is_int = info_dict["amount_is_int"] item.available = info_dict["available"] item.updated_by = info_dict["updated_by"] item.vendor = info_dict["vendor"] item.catalog = info_dict["catalog"] if info_dict["itype_id"] == 0: item.itype_id = None else: item.itype_id = info_dict["itype_id"] if info_dict.get("location_id"): item.location_id = info_dict["location_id"] else: item.location_id = 1
[docs]def checkout_item(database: SQLAlchemy, item: Items, amount: float, user: User) -> None: """ Enters amount of item checked out by user into database. Parameters ---------- database :SQLAlchemy item : Items The item to check out. amount : float Amount of item checked out. user : User who checks out the item. Returns ------- None """ if user.id not in item.user_list: item_amount = ItemsCheckOut(amount=amount) item_amount.user = user with Transaction(database): item.available -= amount item.item_user.append(item_amount) else: user_item = item.item_by_user(user.id) with Transaction(database): item.available -= amount user_item.amount += amount
[docs]def create_template_from_item(database: SQLAlchemy, info_dict: dict) -> None: """ Database transaction to create a new item record. Parameters ---------- database : SQLAlchemy Database record to write to (table) info_dict :dict The information of the record to create. Returns ------- int ID of te newly created item. """ new_item = ItemsTemplate( identifier=info_dict["identifier"], tname=info_dict["tname"], name=info_dict["name"], description=info_dict["description"], unite=info_dict["unite"], amount_is_int=info_dict["amount_is_int"], creator=info_dict["creator"], group_id=info_dict["group_id"], ) if info_dict.get("vendor"): new_item.vendor = info_dict["vendor"] if info_dict.get("catalog"): new_item.catalog = info_dict["catalog"] with Transaction(database) as db_session: db_session.add(new_item)
[docs]def update_item_template(database: SQLAlchemy, item_template: ItemsTemplate, info_dict: dict) -> None: """ Database transaction to create a new item record. Parameters ---------- database : SQLAlchemy Database record to write to (table). item_template : ItemsTemplate Template to update. info_dict :dict The information of the record to create. Returns ------- int ID of te newly created item. """ with Transaction(database): item_template.identifier = info_dict["identifier"] item_template.tname = info_dict["tname"] item_template.name = info_dict["name"] item_template.description = info_dict["description"] item_template.unite = info_dict["unite"] item_template.amount_is_int = info_dict["amount_is_int"] item_template.updated_by = info_dict["creator"] if info_dict.get("vendor"): item_template.vendor = info_dict["vendor"] if info_dict.get("catalog"): item_template.catalog = info_dict["catalog"]