diff --git a/models/areas.py b/models/areas.py
index abb0906..40ef67a 100644
--- a/models/areas.py
+++ b/models/areas.py
@@ -15,6 +15,9 @@ class Area(db.Model):
rooms: Mapped[List['Room']] = relationship('Room', back_populates='area')
+ def __init__(self, name: Optional[str] = None):
+ self.name = name
+
def __repr__(self):
return f""
diff --git a/models/brands.py b/models/brands.py
index 6eb5bf2..6363982 100644
--- a/models/brands.py
+++ b/models/brands.py
@@ -15,6 +15,9 @@ class Brand(db.Model):
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='brand')
+ def __init__(self, name: Optional[str] = None):
+ self.name = name
+
def __repr__(self):
return f""
diff --git a/models/inventory.py b/models/inventory.py
index f487eb1..2028d96 100644
--- a/models/inventory.py
+++ b/models/inventory.py
@@ -39,6 +39,25 @@ class Inventory(db.Model):
item: Mapped['Item'] = relationship('Item', back_populates='inventory')
work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='work_item')
+ def __init__(self, timestamp: datetime.datetime, condition: str, needed: str, type_id: int,
+ inventory_name: Optional[str] = None, serial: Optional[str] = None,
+ model: Optional[str] = None, notes: Optional[str] = None, owner_id: Optional[int] = None,
+ brand_id: Optional[int] = None, location_id: Optional[str] = None, barcode: Optional[str] = None,
+ shared: bool = False):
+ self.timestamp = timestamp
+ self.condition = condition
+ self.needed = needed
+ self.type_id = type_id
+ self.inventory_name = inventory_name
+ self.serial = serial
+ self.model = model
+ self.notes = notes
+ self.owner_id = owner_id
+ self.brand_id = brand_id
+ self.location_id = location_id
+ self.barcode = barcode
+ self.shared = shared
+
def __repr__(self):
parts = [f"id={self.id}"]
diff --git a/models/items.py b/models/items.py
index 447bee4..104c831 100644
--- a/models/items.py
+++ b/models/items.py
@@ -16,6 +16,10 @@ class Item(db.Model):
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='item')
+ def __init__(self, description: Optional[str] = None, category: Optional[str] = None):
+ self.description = description
+ self.category = category
+
def __repr__(self):
return f"- "
diff --git a/models/room_functions.py b/models/room_functions.py
index e52b2f6..4a1bc06 100644
--- a/models/room_functions.py
+++ b/models/room_functions.py
@@ -15,6 +15,9 @@ class RoomFunction(db.Model):
rooms: Mapped[List['Room']] = relationship('Room', back_populates='room_function')
+ def __init__(self, description: Optional[str] = None):
+ self.description = description
+
def __repr__(self):
return f""
diff --git a/models/rooms.py b/models/rooms.py
index 8af94b0..04676f4 100644
--- a/models/rooms.py
+++ b/models/rooms.py
@@ -23,6 +23,11 @@ class Room(db.Model):
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='location')
users: Mapped[List['User']] = relationship('User', back_populates='location')
+ def __init__(self, name: Optional[str] = None, area_id: Optional[int] = None, function_id: Optional[int] = None):
+ self.name = name
+ self.area_id = area_id
+ self.function_id = function_id
+
def __repr__(self):
return f""
diff --git a/models/users.py b/models/users.py
index 8c8df85..c667da0 100644
--- a/models/users.py
+++ b/models/users.py
@@ -17,7 +17,7 @@ class User(db.Model):
active: Mapped[Optional[bool]] = mapped_column("Active", Boolean, server_default=text('((0))'))
last_name: Mapped[Optional[str]] = mapped_column("Last", Unicode(255), nullable=True)
first_name: Mapped[Optional[str]] = mapped_column("First", Unicode(255), nullable=True)
- location_id: Mapped[Optional[str]] = mapped_column(ForeignKey("Rooms.ID"))
+ location_id: Mapped[Optional[str]] = mapped_column(ForeignKey("Rooms.ID"), nullable=True)
supervisor_id: Mapped[Optional[int]] = mapped_column("Supervisor", Integer, ForeignKey("Users.ID"))
supervisor: Mapped[Optional['User']] = relationship('User', remote_side='User.id', back_populates='subordinates')
@@ -30,6 +30,16 @@ class User(db.Model):
@property
def full_name(self) -> str:
return f"{self.first_name or ''} {self.last_name or ''}".strip()
+
+ def __init__(self, first_name: Optional[str] = None, last_name: Optional[str] = None,
+ location_id: Optional[int] = None, supervisor_id: Optional[int] = None,
+ staff: Optional[bool] = False, active: Optional[bool] = False):
+ self.first_name = first_name
+ self.last_name = last_name
+ self.location_id = location_id
+ self.supervisor_id = supervisor_id
+ self.staff = staff
+ self.active = active
def __repr__(self):
return f"= 0:
- return resolved_id
-
- index = abs(resolved_id + 1) if resolved_id is not None else 0
+ raise ValueError(f"{label.title()} ID was not a valid integer: {raw_id}")
+
+ if resolved_id >= 0:
+ # Try to validate this ID by checking if it appears in the map values
+ if resolved_id in id_map.values():
+ return resolved_id
+ else:
+ raise ValueError(f"{label.title()} ID {resolved_id} not found in known {label}s.")
+
+ # It's a negative ID = created on frontend. Resolve from fallback list
+ index = abs(resolved_id + 1)
try:
entry = fallback_list[index]
key = entry["name"] if isinstance(entry, dict) else str(entry).strip()
- except (IndexError, KeyError, TypeError):
- raise ValueError(f"Invalid {label} index or format at index {index}: {entry}")
-
+ except (IndexError, KeyError, TypeError) as e:
+ raise ValueError(f"Invalid {label} index or format at index {index}: {entry if entry else 'UNKNOWN'}") from e
+
final_id = id_map.get(key)
if not final_id:
raise ValueError(f"Unresolved {label}: {key}")
diff --git a/templates/settings.html b/templates/settings.html
index adede4f..7c1d1fc 100644
--- a/templates/settings.html
+++ b/templates/settings.html
@@ -190,8 +190,12 @@ submit_button=True
saveButton.addEventListener('click', () => {
const name = document.getElementById('roomName').value.trim();
- const section = document.getElementById('roomSection').value;
- const func = document.getElementById('roomFunction').value;
+ const sectionVal = document.getElementById('roomSection').value;
+ const funcVal = document.getElementById('roomFunction').value;
+
+ const section = sectionVal !== "" ? parseInt(sectionVal) : null;
+ const func = funcVal !== "" ? parseInt(funcVal) : null;
+
if (!name) {
alert('Please enter a room name.');
@@ -208,6 +212,14 @@ submit_button=True
// Add to select box visibly
const option = ComboBoxWidget.createOption(name);
+
+ if (section !== null) {
+ option.dataset.sectionId = section;
+ }
+ if (func !== null) {
+ option.dataset.functionId = func;
+ }
+
roomList.appendChild(option);
ComboBoxWidget.sortOptions(roomList);