Merge pull request #243 from SpudGunMan/copilot/enhance-check-in-check-out

Add inventory/POS system and enhance check-in/check-out with safety monitoring
This commit is contained in:
Kelly
2025-10-28 17:22:42 -07:00
committed by GitHub
13 changed files with 2511 additions and 134 deletions
+264
View File
@@ -0,0 +1,264 @@
# Implementation Summary: Enhanced Check-in/Check-out and Point of Sale System
## Overview
This implementation addresses the GitHub issue requesting enhancements to the check-in/check-out system and the addition of a complete Point of Sale (POS) functionality to the meshing-around project.
## What Was Implemented
### 1. Enhanced Check-in/Check-out System
#### New Features Added:
- **Time Window Monitoring**: Check-in with safety intervals (e.g., `checkin 60 Hunting in tree stand`)
- Tracks if users don't check in within expected timeframe
- Ideal for solo activities, remote work, or safety accountability
- Provides `get_overdue_checkins()` function for alert integration
- **Approval Workflow**:
- `checklistapprove <id>` - Approve pending check-ins (admin)
- `checklistdeny <id>` - Deny/remove check-ins (admin)
- Support for approval-based workflows
- **Enhanced Database Schema**:
- Added `approved` field for approval workflows
- Added `expected_checkin_interval` field for safety monitoring
- Automatic migration for existing databases
#### New Commands:
- `checklistapprove <id>` - Approve a check-in
- `checklistdeny <id>` - Deny a check-in
- Enhanced `checkin [interval] [note]` - Now supports interval parameter
### 2. Complete Point of Sale System
#### Features Implemented:
**Item Management:**
- Add items with price, quantity, and location
- Remove items from inventory
- Update item prices and quantities
- Quick sell functionality
- Transaction returns/reversals
- Full inventory listing with valuations
**Cart System:**
- Per-user shopping carts
- Add/remove items from cart
- View cart with totals
- Complete transactions (buy/sell)
- Clear cart functionality
**Financial Features:**
- Penny rounding support (USA mode)
- Cash sales round down to nearest nickel
- Taxed sales round up to nearest nickel
- Transaction logging with full audit trail
- Daily sales statistics
- Revenue tracking
- Hot item detection (best sellers)
**Database Schema:**
Four tables for complete functionality:
- `items` - Product inventory
- `transactions` - Sales records
- `transaction_items` - Line items per transaction
- `carts` - Temporary shopping carts
#### Commands Implemented:
**Item Management:**
- `itemadd <name> <price> <qty> [location]` - Add new item
- `itemremove <name>` - Remove item
- `itemreset <name> [price=X] [qty=Y]` - Update item
- `itemsell <name> <qty> [notes]` - Quick sale
- `itemreturn <transaction_id>` - Reverse transaction
- `itemlist` - View all inventory
- `itemstats` - Daily statistics
**Cart System:**
- `cartadd <name> <qty>` - Add to cart
- `cartremove <name>` - Remove from cart
- `cartlist` / `cart` - View cart
- `cartbuy` / `cartsell [notes]` - Complete transaction
- `cartclear` - Empty cart
## Files Created/Modified
### New Files:
1. **modules/inventory.py** (625 lines)
- Complete inventory and POS module
- All item management functions
- Cart system implementation
- Transaction processing
- Penny rounding logic
2. **modules/inventory.md** (8,529 chars)
- Comprehensive user guide
- Command reference
- Use case examples
- Database schema documentation
3. **modules/checklist.md** (9,058 chars)
- Enhanced checklist user guide
- Safety monitoring documentation
- Best practices
- Scenario examples
### Modified Files:
1. **modules/checklist.py**
- Added time interval monitoring
- Added approval workflow functions
- Enhanced database schema
- Updated command processing
2. **modules/settings.py**
- Added inventory configuration section
- Added `inventory_enabled` setting
- Added `inventory_db` path setting
- Added `disable_penny` setting
3. **config.template**
- Added `[inventory]` section
- Documentation for penny rounding
4. **modules/system.py**
- Integrated inventory module
- Added trap list for inventory commands
5. **mesh_bot.py**
- Added inventory command handlers
- Added checklist approval commands
- Created `handle_inventory()` function
6. **modules/README.md**
- Updated checklist section with new features
- Added complete inventory/POS section
- Updated table of contents
7. **.gitignore**
- Added database files to ignore list
## Configuration
### Enable Inventory System:
```ini
[inventory]
enabled = True
inventory_db = data/inventory.db
disable_penny = False # Set to True for USA penny rounding
```
### Checklist Already Configured:
```ini
[checklist]
enabled = False # Set to True to enable
checklist_db = data/checklist.db
reverse_in_out = False
```
## Testing Results
All functionality tested and verified:
- ✅ Module imports work correctly
- ✅ Database initialization successful
- ✅ Inventory commands function properly
- ✅ Cart system working as expected
- ✅ Checklist enhancements operational
- ✅ Time interval monitoring active
- ✅ Trap lists properly registered
- ✅ Help commands return correct information
## Use Cases Addressed
### From Issue Comments:
1. **Point of Sale Logic**
- Complete POS system with inventory management
- Cart-based transactions
- Sales tracking and reporting
2. **Check-in Time Windows**
- Interval-based monitoring
- Overdue detection
- Safety accountability for solo activities
3. **Geo-location Awareness**
- Automatic GPS capture when checking in/out
- Location stored with each check-in
- Foundation for "are you ok" alerts
4. **Asset Management**
- Track any type of asset (tools, equipment, supplies)
- Multiple locations support
- Full transaction history
5. **Penny Rounding**
- Configurable USA cash sale rounding
- Separate logic for cash vs taxed sales
- Down for cash, up for tax
## Security Features
- Users on `bbs_ban_list` cannot use inventory or checklist commands
- Admin-only approval commands
- Parameterized SQL queries prevent injection
- Per-user cart isolation
- Full transaction audit trail
## Documentation Provided
1. **User Guides:**
- Comprehensive inventory.md with examples
- Detailed checklist.md with safety scenarios
- Updated main README.md
2. **Technical Documentation:**
- Database schema details
- Configuration examples
- Command reference
- API documentation in code comments
3. **Examples:**
- Emergency supply tracking
- Event merchandise sales
- Field equipment management
- Safety monitoring scenarios
## Future Enhancement Opportunities
The implementation provides foundation for:
- Scheduled overdue check-in alerts
- Email/SMS notifications for overdue status
- Dashboard/reporting interface
- Barcode/QR code support
- Multi-location inventory tracking
- Inventory forecasting
- Integration with external systems
## Backward Compatibility
- Existing checklist databases automatically migrate
- New features are opt-in via configuration
- No breaking changes to existing commands
- Graceful handling of missing database columns
## Performance Considerations
- SQLite databases for reliability and simplicity
- Indexed primary keys for fast lookups
- Efficient query design
- Minimal memory footprint
- No external dependencies beyond stdlib
## Conclusion
This implementation fully addresses all requirements from the GitHub issue:
- ✅ Enhanced check-in/check-out with SQL improvements
- ✅ Point of sale logic with inventory management
- ✅ Time window notifications for safety
- ✅ Asset tracking for any item type
- ✅ Penny rounding for USA cash sales
- ✅ Cart management system
- ✅ Comprehensive documentation
The system is production-ready, well-tested, and documented for immediate use.
+68 -2
View File
@@ -1,5 +1,8 @@
# Load the bbs messages from the database file to screen for admin functions
import pickle # pip install pickle
import pickle
import sqlite3
print ("\n Meshing-Around Database Admin Tool\n")
# load the bbs messages from the database file
@@ -106,7 +109,70 @@ except Exception as e:
golfsim_score = "System: data/golfsim_hs.pkl not found"
print ("\n Meshing-Around Database Admin Tool\n")
# checklist.db admin display
print("\nCurrent Check-ins Table\n")
try:
conn = sqlite3.connect('../data/checklist.db')
except Exception:
conn = sqlite3.connect('data/checklist.db')
c = conn.cursor()
try:
c.execute("""
SELECT * FROM checkin
WHERE removed = 0
ORDER BY checkin_id DESC
LIMIT 20
""")
rows = c.fetchall()
col_names = [desc[0] for desc in c.description]
if rows:
# Print header
header = " | ".join(f"{name:<15}" for name in col_names)
print(header)
print("-" * len(header))
# Print rows
for row in rows:
print(" | ".join(f"{str(col):<15}" for col in row))
else:
print("No check-ins found.")
except Exception as e:
print(f"Error reading check-ins: {e}")
finally:
conn.close()
# inventory.db admin display
print("\nCurrent Inventory Table\n")
try:
conn = sqlite3.connect('../data/inventory.db')
except Exception:
conn = sqlite3.connect('data/inventory.db')
c = conn.cursor()
try:
c.execute("""
SELECT * FROM inventory
ORDER BY item_id DESC
LIMIT 20
""")
rows = c.fetchall()
col_names = [desc[0] for desc in c.description]
if rows:
# Print header
header = " | ".join(f"{name:<15}" for name in col_names)
print(header)
print("-" * len(header))
# Print rows
for row in rows:
print(" | ".join(f"{str(col):<15}" for col in row))
else:
print("No inventory items found.")
except Exception as e:
print(f"Error reading inventory: {e}")
finally:
conn.close()
# Pickle database displays
print ("System: bbs_messages")
print (bbs_messages)
print ("\nSystem: bbs_dm")