"""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"],
is_permanent=info_dict["is_permanent"],
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"]
item.is_permanent = info_dict["is_permanent"]
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"]