You are on page 1of 6

import sqlite3

class Guest:

def __init__(self, guest_id, name, email, reservation):

self.guest_id = guest_id

self.name = name

self.email = email

self.reservation = reservation

self.service_requests = []

def add_service_request(self, service_request):

self.service_requests.append(service_request)

def remove_service_request(self, service_request):

self.service_requests.remove(service_request)

class Reservation:

def __init__(self, reservation_id, room_type, check_in_date, check_out_date):

self.reservation_id = reservation_id

self.room_type = room_type

self.check_in_date = check_in_date

self.check_out_date = check_out_date

class GuestTracker:

def __init__(self, database_file):

self.database_file = database_file

self.connection = sqlite3.connect(database_file)

self.cursor = self.connection.cursor()
def create_tables(self):

self.cursor.execute('''

CREATE TABLE IF NOT EXISTS guests (

guest_id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT,

email TEXT UNIQUE,

reservation_id INTEGER

''')

self.cursor.execute('''

CREATE TABLE IF NOT EXISTS reservations (

reservation_id INTEGER PRIMARY KEY AUTOINCREMENT,

room_type TEXT,

check_in_date TEXT,

check_out_date TEXT

''')

self.cursor.execute('''

CREATE TABLE IF NOT EXISTS service_requests (

request_id INTEGER PRIMARY KEY AUTOINCREMENT,

guest_id INTEGER,

request TEXT,

FOREIGN KEY (guest_id) REFERENCES guests (guest_id)

''')

self.connection.commit()
def add_guest(self, guest):

self.cursor.execute('INSERT INTO guests (name, email, reservation_id) VALUES (?, ?, ?)',

(guest.name, guest.email, guest.reservation.reservation_id))

self.connection.commit()

guest.guest_id = self.cursor.lastrowid

def remove_guest(self, guest):

self.cursor.execute('DELETE FROM guests WHERE guest_id = ?', (guest.guest_id,))

self.connection.commit()

def get_guest_by_email(self, email):

self.cursor.execute('SELECT * FROM guests WHERE email = ?', (email,))

guest_data = self.cursor.fetchone()

if guest_data:

guest_id, name, email, reservation_id = guest_data

reservation = self.get_reservation_by_id(reservation_id)

return Guest(guest_id, name, email, reservation)

return None

def get_reservation_by_id(self, reservation_id):

self.cursor.execute('SELECT * FROM reservations WHERE reservation_id = ?', (reservation_id,))

reservation_data = self.cursor.fetchone()

if reservation_data:

reservation_id, room_type, check_in_date, check_out_date = reservation_data

return Reservation(reservation_id, room_type, check_in_date, check_out_date)

return None

def get_guests_by_date_range(self, start_date, end_date):


self.cursor.execute('''

SELECT * FROM guests

JOIN reservations ON guests.reservation_id = reservations.reservation_id

WHERE check_in_date >= ? AND check_out_date <= ?

''', (start_date, end_date))

guest_data = self.cursor.fetchall()

guests = []

for guest_row in guest_data:

guest_id, name, email, reservation_id, _, _, _, _ = guest_row

reservation = self.get_reservation_by_id(reservation_id)

guests.append(Guest(guest_id, name, email, reservation))

return guests

def add_service_request(self, guest_email, service_request):

guest = self.get_guest_by_email(guest_email)

if guest:

self.cursor.execute('INSERT INTO service_requests (guest_id, request) VALUES (?, ?)',

(guest.guest_id, service_request))

self.connection.commit()

guest.add_service_request(service_request)

else:

print('Guest not found.')

def remove_service_request(self, guest_email, service_request):

guest = self.get_guest_by_email(guest_email)

if guest:

self.cursor.execute('DELETE FROM service_requests WHERE guest_id = ? AND request = ?',

(guest.guest_id, service_request))

self.connection.commit()
guest.remove_service_request(service_request)

else:

print('Guest not found.')

def close_connection(self):

self.cursor.close()

self.connection.close()

# Example usage

reservation1 = Reservation(None, 'Standard', '2023-07-10', '2023-07-15')

guest1 = Guest(None, 'Harrison Adom', 'hadom2607@example.com', reservation1)

reservation2 = Reservation(None, 'Deluxe', '2023-07-12', '2023-07-17')

guest2 = Guest(None, 'Robert Zigah', 'robzigah@example.com', reservation2)

tracker = GuestTracker('guests.db')

tracker.create_tables()

tracker.add_guest(guest1)

tracker.add_guest(guest2)

# Add service requests for a guest

tracker.add_service_request('hadom2607@example.com', 'Extra towels')

tracker.add_service_request('hadom2607@example.com', 'Room cleaning')

# Remove a service request for a guest

tracker.remove_service_request('hadom2607@example.com', 'Extra towels')

# Retrieve guests by date range


guests = tracker.get_guests_by_date_range('2023-07-11', '2023-07-14')

print('Guests in date range:')

for guest in guests:

print(guest.name)

tracker.close_connection()

You might also like