#!/usr/bin/env python3 """ Script to assign test housekeeping tasks to the housekeeping user. This creates sample tasks for testing the housekeeping dashboard. """ import sys import os from pathlib import Path from datetime import datetime, timedelta # Add the Backend directory to the path backend_dir = Path(__file__).parent.parent sys.path.insert(0, str(backend_dir)) from src.shared.config.database import SessionLocal from src.models import Role, User, Room from src.hotel_services.models.housekeeping_task import HousekeepingTask, HousekeepingStatus, HousekeepingType def assign_housekeeping_tasks(): """Assign test housekeeping tasks to the housekeeping user.""" db = SessionLocal() try: # Get housekeeping user housekeeping_user = db.query(User).join(Role).filter( Role.name == 'housekeeping', User.email == 'housekeeping@gnxsoft.com' ).first() if not housekeeping_user: print("✗ Housekeeping user not found! Please run add_housekeeping_user.py first.") sys.exit(1) print(f"✓ Found housekeeping user: {housekeeping_user.email} (ID: {housekeeping_user.id})") # Get admin user for created_by admin_role = db.query(Role).filter(Role.name == 'admin').first() admin_user = db.query(User).filter(User.role_id == admin_role.id).first() if admin_role else None # Get some rooms rooms = db.query(Room).limit(5).all() if not rooms: print("✗ No rooms found in the database! Please seed rooms first.") sys.exit(1) print(f"✓ Found {len(rooms)} rooms") # Default checklist items for different task types checklists = { 'checkout': [ {'item': 'Bathroom cleaned', 'completed': False, 'notes': ''}, {'item': 'Beds made with fresh linens', 'completed': False, 'notes': ''}, {'item': 'Trash emptied', 'completed': False, 'notes': ''}, {'item': 'Towels replaced', 'completed': False, 'notes': ''}, {'item': 'Amenities restocked', 'completed': False, 'notes': ''}, {'item': 'Floor vacuumed and mopped', 'completed': False, 'notes': ''}, {'item': 'Surfaces dusted', 'completed': False, 'notes': ''}, {'item': 'Windows and mirrors cleaned', 'completed': False, 'notes': ''}, ], 'stayover': [ {'item': 'Beds made', 'completed': False, 'notes': ''}, {'item': 'Trash emptied', 'completed': False, 'notes': ''}, {'item': 'Towels replaced', 'completed': False, 'notes': ''}, {'item': 'Bathroom cleaned', 'completed': False, 'notes': ''}, ], 'vacant': [ {'item': 'Deep clean bathroom', 'completed': False, 'notes': ''}, {'item': 'Change linens', 'completed': False, 'notes': ''}, {'item': 'Vacuum and mop', 'completed': False, 'notes': ''}, {'item': 'Dust surfaces', 'completed': False, 'notes': ''}, {'item': 'Check amenities', 'completed': False, 'notes': ''}, ], 'inspection': [ {'item': 'Check all amenities', 'completed': False, 'notes': ''}, {'item': 'Test electronics', 'completed': False, 'notes': ''}, {'item': 'Check for damages', 'completed': False, 'notes': ''}, {'item': 'Verify cleanliness', 'completed': False, 'notes': ''}, ], } # Create tasks for today today = datetime.utcnow().replace(hour=9, minute=0, second=0, microsecond=0) task_types = ['checkout', 'stayover', 'vacant', 'inspection'] created_count = 0 skipped_count = 0 for i, room in enumerate(rooms): # Cycle through task types task_type = task_types[i % len(task_types)] # Check if task already exists for this room today existing_task = db.query(HousekeepingTask).filter( HousekeepingTask.room_id == room.id, HousekeepingTask.assigned_to == housekeeping_user.id, HousekeepingTask.status == HousekeepingStatus.pending, HousekeepingTask.scheduled_time >= today.replace(hour=0, minute=0), HousekeepingTask.scheduled_time < today.replace(hour=23, minute=59, second=59) ).first() if existing_task: print(f" ⚠️ Task already exists for Room {room.room_number}, skipping...") skipped_count += 1 continue # Schedule tasks at different times throughout the day scheduled_time = today + timedelta(hours=i) task = HousekeepingTask( room_id=room.id, booking_id=None, task_type=HousekeepingType(task_type), status=HousekeepingStatus.pending, scheduled_time=scheduled_time, assigned_to=housekeeping_user.id, created_by=admin_user.id if admin_user else housekeeping_user.id, checklist_items=checklists.get(task_type, []), notes=f'Test task for Room {room.room_number} - {task_type} cleaning', estimated_duration_minutes=45 if task_type == 'checkout' else 30 ) db.add(task) created_count += 1 print(f" ✓ Created {task_type} task for Room {room.room_number} (scheduled: {scheduled_time.strftime('%Y-%m-%d %H:%M')})") db.commit() print(f"\n✓ Tasks assigned successfully!") print(f" - Created: {created_count} task(s)") print(f" - Skipped: {skipped_count} task(s) (already exist)") print(f" - Assigned to: {housekeeping_user.email}") except Exception as e: db.rollback() print(f"✗ Error assigning housekeeping tasks: {e}") import traceback traceback.print_exc() sys.exit(1) finally: db.close() if __name__ == '__main__': print("Assigning test housekeeping tasks to housekeeping user...") print("=" * 60) assign_housekeeping_tasks() print("=" * 60) print("Done!")