2026-06-03 10:43:17 +01:00
# 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)
2026-06-09 23:54:38 +01:00
- **Non-Loanable Devices**: Track inventory devices that cannot be loaned (e.g., projectors, monitors)
2026-06-03 10:43:17 +01:00
- **Project Notes**: Markdown editor for development documentation
## Files
2026-06-09 23:54:38 +01:00
- `minimal_app.py` - Interactive command-line application (includes non-loanable device management)
2026-06-03 10:43:17 +01:00
- `test_app.py` - Test script that demonstrates functionality
2026-06-09 23:54:38 +01:00
- `tablets.db` - SQLite database (created automatically, includes non_loanable_devices table)
- `simple_app.py` - Web-based version (requires Flask, includes non-loanable device management)
- `app.py` - Alternative web version (requires Flask, includes non-loanable device management)
2026-06-03 10:43:17 +01:00
## Quick Start
### 1. Run the test to see it in action
```bash
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 interactive application
```bash
python3 minimal_app.py
```
This provides a menu-driven interface for:
- Adding tablets
- Adding users
- Loaning tablets
- Returning tablets
- Viewing inventory and loan status
### 3. Database Structure
The system uses three main tables with a **many-to-many relationship** between users and tablets:
**tablets**
- `id` : Primary key
- `brand` : Tablet brand
- `model` : Tablet model
- `serial_number` : Unique serial number
- `status` : 'available' or 'loaned'
**users**
- `id` : Primary key
- `name` : User's name
- `identification` : Unique identification
**loans** (junction table)
- `id` : Primary key
- `tablet_id` : Foreign key to tablets
- `user_id` : Foreign key to users
- `loan_date` : When the tablet was loaned
- `return_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 `status` field 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:
1. Install Flask:
```bash
pip install flask
```
2. Run the web application:
```bash
python3 app.py
```
3. 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
2026-06-09 23:54:38 +01:00
- **Non-Loanable Devices**: Manage inventory of devices that cannot be loaned (add, edit, delete, view)
2026-06-03 10:43:17 +01:00
- **Project Management**: Markdown editor for development notes (saved to `notes_development/project_notes.md` )
## Database Backup
To backup your data:
```bash
cp tablets.db tablets_backup_$(date +%Y%m%d).db
```
2026-06-04 01:00:49 +01:00
## Version Control
This project uses Git for version control with the following structure:
- `master` - Production-ready releases
- `develop` - Integration branch for features
- `feature/*` - Individual feature branches
- `hotfix/*` - Urgent bug fixes
See `CONTRIBUTING.md` for detailed workflow and commit conventions.
2026-06-03 10:43:17 +01:00
## License
This is a simple educational project. Feel free to use and modify it as needed.