- Add Schamann.png logo to static/ directory - Update base.html header with logo (force scaled to 40px) - Replace primary color with corporate color palette: - Cobalt Blue (#1338BE) for headers and navigation - Tiger Orange (#FC6A03) for accents and loading indicators - Emerald Green (#028A0F) for success states - Add full shade ranges (50-900) for all three colors in Tailwind config - Create docs/CORPORATE_DESIGN.md with color specifications and usage guidelines |
||
|---|---|---|
| assets | ||
| docs | ||
| static | ||
| templates | ||
| tests | ||
| translations | ||
| .gitignore | ||
| app.py | ||
| basic_server.py | ||
| check_flask.py | ||
| compile_translations.py | ||
| CONTRIBUTING.md | ||
| debug_server.py | ||
| extract_translations.py | ||
| gestiontablets.sh | ||
| index.html | ||
| main.py | ||
| minimal_app.py | ||
| pyproject.toml | ||
| README.md | ||
| REQUIREMENTS.md | ||
| requirements.txt | ||
| RUNNING.md | ||
| setup.py | ||
| simple_app.py | ||
| TECHNICAL_SPECIFICATIONS.md | ||
| test_app.py | ||
| working_server.py | ||
Tablet Lending and Return Management System
A simple SQLite-based system for managing tablet lending and returns.
Features
- Tablet Management: Add, track, and manage tablets in inventory
- User Management: Register users who can borrow tablets
- Loan Tracking: Track which tablets are loaned to which users
- Return Management: Record when tablets are returned
- History Tracking: Complete history of all loans and returns
- User Loans View: See all tablets loaned to each user (demonstrates one-to-many relationship)
- Non-Loanable Devices: Track inventory devices that cannot be loaned (e.g., projectors, monitors)
- Project Notes: Markdown editor for development documentation
Files
minimal_app.py- DEPRECATED - Interactive command-line application (limited functionality, useapp.pyinstead)test_app.py- Test script that demonstrates functionalitytablets.db- SQLite database (created automatically, includes non_loanable_devices table)app.py- Recommended - Full-featured web version (requires Flask, includes all features)
Quick Start
1. Run the test to see it in action
python3 test_app.py
This will:
- Create the database
- Add sample tablets and users
- Demonstrate loan and return operations
- Show the complete workflow
2. Run the web application (Recommended)
python3 app.py
This provides a full-featured web interface for:
- Adding tablets (with notes field)
- Adding users (with email and phone)
- Loaning tablets
- Returning tablets
- Viewing inventory and loan status
- User loans view with search
- Non-loanable devices management
- Project management with markdown notes
3. Database Structure
The system uses three main tables with a many-to-many relationship between users and tablets:
tablets
id: Primary keybrand: Tablet brandmodel: Tablet modelserial_number: Unique serial numberstatus: 'available' or 'loaned'
users
id: Primary keyname: User's nameidentification: Unique identification
loans (junction table)
id: Primary keytablet_id: Foreign key to tabletsuser_id: Foreign key to usersloan_date: When the tablet was loanedreturn_date: When the tablet was returned (NULL if still active)status: 'active' or 'returned'
Note
: The loans table enables a many-to-many relationship. One user can loan multiple tablets (one-to-many from user to loans), and each tablet can be loaned to different users over time. The
statusfield on tablets ensures a device can only be loaned to one user at a time.
Requirements
- Python 3.x (built-in sqlite3 module)
- No additional dependencies needed for the command-line version
- Flask required for web versions (optional)
Usage Examples
Adding a tablet
python3 -c "
import sqlite3
conn = sqlite3.connect('tablets.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO tablets (brand, model, serial_number, status) VALUES (?, ?, ?, ?)',
('Microsoft', 'Surface Pro', 'SN004', 'available'))
conn.commit()
conn.close()
print('Tablet added!')
"
Adding a user
python3 -c "
import sqlite3
conn = sqlite3.connect('tablets.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO users (name, identification) VALUES (?, ?)',
('Alice Brown', 'ID004'))
conn.commit()
conn.close()
print('User added!')
"
Querying available tablets
python3 -c "
import sqlite3
conn = sqlite3.connect('tablets.db')
cursor = conn.cursor()
cursor.execute('SELECT brand, model, serial_number FROM tablets WHERE status = ?', ('available',))
for row in cursor.fetchall():
print(f'{row[0]} {row[1]} ({row[2]})')
conn.close()
"
Web Version (Optional)
If you want to use the web interface:
- Install Flask:
pip install flask
- Run the web application:
python3 app.py
- Open your browser to: http://localhost:5000
Web Features
- Home: View available tablets and active loans
- Loan Tablet: Loan a tablet to a user (with search for large datasets)
- User Loans: View all tablets loaned to each user - demonstrates the one-to-many relationship (one user, multiple tablets)
- Loan History: Complete history of all loan and return transactions
- Non-Loanable Devices: Manage inventory of devices that cannot be loaned (add, edit, delete, view)
- Project Management: Markdown editor for development notes (saved to
notes_development/project_notes.md)
Database Backup
To backup your data:
cp tablets.db tablets_backup_$(date +%Y%m%d).db
Testing
The project includes a comprehensive unit test suite with 46 tests covering core functionality and edge cases.
Running Tests
# Install test dependencies (if not already installed)
source .venv/bin/activate
uv pip install pytest pytest-cov
# Run all tests
python3 -m pytest tests/ -v
# Run with coverage report
python3 -m pytest tests/ --cov=./ --cov-report=term-missing
Test Structure
| File | Tests | Coverage |
|---|---|---|
tests/test_core.py |
21 | Core operations (tablet, user, loan CRUD) |
tests/test_edge_cases.py |
14 | Edge cases (duplicates, invalid IDs, etc.) |
tests/test_minimal_app.py |
11 | Application function tests |
Key Edge Cases Covered
- Loan a device that's already loaned (prevents double-loaning)
- Return a non-existent loan (handles gracefully)
- Duplicate serial numbers (rejected at database level)
- Duplicate user identifications (rejected at database level)
- Invalid tablet/user IDs (validated before operations)
- Multiple loans per user (one-to-many relationship)
- Loan-return-loan sequence (device lifecycle)
Test Configuration
Tests use isolated temporary databases and automatically clean up after each test run. No impact on production data.
License
This is a simple educational project. Feel free to use and modify it as needed.