Ejemplo n.º 1
0
def room_id_search(cruise,clients):

  """
  Funcion que muestra los clientes hospedados en una habitacion particular. Recibe como parametros la lista con los datos de las habitaciones del crucero y la lista con los datos de los clientes hospedados en el mismo
  """

  while True:
    try:
      room_id = input("Indique el Tipo + Pasillo + Número (ej. SA9):  ").upper()
      break
    except:
      print('Valor invalido. Intente nuevamente')
      
      
  r_type = 0  #Denota el indice del tipo de habitacion
  end_search = False

  #Mientras se de la condicion de que end search es Falso, se seguira repitiendo el ciclo. Tambien se valida de que r_type no supere el tamaño de la lista cruise 
  while r_type < len(cruise) and end_search == False:
    room_search = search_available(cruise[r_type],0,room_id,4)
    if room_search != "No encontrado":
      
      end_search = True
    r_type += 1
  if room_search != "No encontrado":
    if len(clients) != 0:
      first_index = search_available(clients,0,room_id,4)
      print(first_index)
      found_rooms = []
      found_rooms.append(first_index)
      if first_index != "No encontrado":
        
        end_search = False
        while end_search == False:
          first_index += 1
          if first_index < len(clients):
            
            found_index = search_available(clients,first_index,room_id,4)
            if found_index != "No encontrado":
              found_rooms.append(found_index)
              print(found_index)
            else:
              end_search = True
          else:
            end_search = True
          
          
        print("Clientes hospedados en esta habitacion:")
        for index in found_rooms:
          print(f"\t{clients[index].name}")
        print("")
        search_answer = input("Presione 1 si desea realizar otra busqueda: ")
      else:
        print("No hay clientes hospedados en esta habitacion")
        search_answer = input("Presione 1 si desea realizar otra busqueda: ")
      
  else:
    print("La habitacion ingresada no existe")
    search_answer = input("Presione 1 si desea realizar otra busqueda: ")
  return search_answer
Ejemplo n.º 2
0
def room_capacity_search(cruise):


  """
  Funcion que muestra las habitaciones con la capacidad de personas indicada
  """


  while True:
    try:
      room_capacity = int(input("Ingrese la capacidad de la habitacion que desea buscar: "))
      break
    except:
      print('Valor invalido. Intente nuevamente')
      
      
      
      
  r_type = 0
  end_search = False
  while r_type < len(cruise) and end_search == False:
    found_index = search_available(cruise[r_type],0,room_capacity,3)
    if found_index != "No encontrado":
      
      end_search = True
    r_type += 1
  if end_search == True:
    
    show_floors(cruise,r_type)
    print("\n")
    search_answer = input("Presione 1 si desea realizar otra busqueda")
  else: 
    print("No se encontró ninguna habitacion con esa capacidad")
    search_answer = input("Presione 1 si desea realizar otra busqueda: ")  
  return search_answer
Ejemplo n.º 3
0
def percentage_tours(data_base):
    """
  Funcion que el porcentaje de clientes que no compran tours en un crucero en particular
  
  """

    cruise_answer = select_cruise(data_base)
    clients_file = "clients_cruise" + str(cruise_answer) + ".txt"
    count_clients = fm.check_empty(clients_file)
    if count_clients:
        clients = []
    else:
        clients = fm.fill_clients(clients_file)
        print('Clientes lleno')

    tours_file = "tours_cruise" + str(cruise_answer) + ".txt"
    count_tours = fm.check_empty(tours_file)
    if count_tours:
        tours = []
    else:
        tours = fm.fill_tours(tours_file)
        print('Clientes lleno')

    total_clients = len(clients)

    if len(clients) != 0:
        if len(tours) != 0:
            tour_clients = 0
            for i in range(len(clients)):

                found_client = search_available(tours, 0, clients[i].dni, 2)

                if found_client == "No encontrado":
                    tour_clients += 1

            percentage = (tour_clients / total_clients) * 100

            print(
                f'El porcentage de clientes que no compran tour en este crucero es de {percentage}%'
            )
        else:
            percentage = 100
            print(
                f'El porcentage de clientes que no compran tour en este crucero es de {percentage}%'
            )

    else:

        print('No hay clientes hospedados en este crucero')
Ejemplo n.º 4
0
def sell_tours(cruise, cruise_answer):
    """

  Funcion que permite vender tours a los clientes hospedados en un respectivo crucero, ademas de almacenar los datos de dichas ventas

  """

    #Primero se valida si existe un archivo con los datos de tours comprados en el crucero, de ser asi se llena una lista con los datos guardados en el mismo, de lo contrario se crea la lista vacía

    tours_file = "tours_cruise" + str(cruise_answer) + ".txt"
    count_tours = fm.check_empty(tours_file)
    if count_tours:
        tours = []
    else:
        tours = fm.fill_tours(tours_file)

    #Primero se valida si existe un archivo con los datos de clientes hospedados en el crucero, de ser asi se llena una lista con los datos guardados en el mismo, de lo contrario se crea la lista vacía
    clients_file = "clients_cruise" + str(cruise_answer) + ".txt"
    count_clients = fm.check_empty(clients_file)
    if count_clients:
        clients = []
    else:
        clients = fm.fill_clients(clients_file)

    while True:

        try:
            dni = int(input('Por favor ingrese su dni:'))
            break
        except:
            print('Valor invalido. Intente nuevamente')

    #Se valida si la lista clientes no esta vacia, de estarlo se indica que no hay clientes hospedados en el crucero especificado

    if len(clients) != 0:

        #Se busca la cedula ingresada en la base de datos para validar si se encuentra registrado. De no estarlo no podrá comprar un tour

        search_dni = search_available(clients, 0, dni, 2)

        if search_dni != "No encontrado" and clients[
                search_dni].room_id != "Salió":
            tour_answer = select_tour()
            people_quantity = input_people_quantity()
            payment = tour_price(tour_answer, people_quantity)
            time = tour_time(tour_answer)
            limit = tour_limit(tour_answer)

            if len(tours) == 0:
                #Si payment es igual a none, significa que no se pudo comprar el tour ya que se exedio la cantidad de personas
                if payment != None:

                    new_tour = Tour(dni, tour_answer, people_quantity, payment,
                                    time)
                    #Se crea un archivo que contenga los datos del Tour comprado
                    tours.append(new_tour)
                    fm.create_tour_txt(tours, tours_file)

                    #Se actualiza la base de datos de clientes indicando lo que pago en el tour
                    clients[search_dni].tour = payment
                    fm.create_client_txt(clients, clients_file)

                    tour_bill(clients[search_dni], payment)

                    print("Compra de tour exitosa")

            else:
                dni_tours = []
                search_dni_tours = search_available(tours, 0, dni, 2)

                first_tour_index = 0
                while first_tour_index < len(tours):

                    found_tour_index = search_available(
                        tours, first_tour_index, tour_answer, 5)

                    if found_tour_index != "No encontrado":
                        dni_tours.append(found_tour_index)
                        first_tour_index = found_tour_index
                        first_tour_index += 1

                    else:

                        first_tour_index += 1
                print(dni_tours)
                if search_dni_tours != "No encontrado" and tours[
                        search_dni_tours].tour_id == tour_answer:
                    print("No puede comprar el mismo tour varias veces")
                else:

                    if payment != None:
                        total_people = 0
                        if len(dni_tours) != 0:
                            for i in dni_tours:

                                total_people += tours[i].people_quantity
                        print(limit)
                        print(total_people + people_quantity)

                        #Se valida que no se exceda el cupo admitido de personas para el Tour
                        if (total_people +
                                people_quantity) > limit and limit != False:

                            print(
                                f"Lo sentimos, no hay cupos suficientes para {people_quantity} personas"
                            )

                        else:
                            new_tour = Tour(dni, tour_answer, people_quantity,
                                            payment, time)

                            tours.append(new_tour)
                            fm.create_tour_txt(tours, tours_file)

                            clients[search_dni].tour += payment
                            fm.create_client_txt(clients, clients_file)

                            tour_bill(clients[search_dni], payment)

                            print("Compra de tour exitosa")

        else:
            print(
                "El numero de cedula ingresado no se encuentra en la base de datos"
            )

    else:
        print("No hay clientes hospedados en este crucero")
Ejemplo n.º 5
0
def leave_room(cruise,cruise_answer,data_base):




  
  clients_file = "clients_cruise"+str(cruise_answer)+".txt"
  count_clients = fm.check_empty(clients_file)
  if count_clients:
    clients = []
  else:
    clients = fm.fill_clients(clients_file)
    print('Clientes lleno')
  
  while True:
    
    try:
      dni = int(input('Por favor ingrese su dni:'))
      break
    except:
      print('Valor invalido. Intente nuevamente')
  if len(clients) != 0:    
    dni_index = search_available(clients,0,dni,2)
    if dni_index != "No encontrado":
      room_id = clients[dni_index].room_id
      clients[dni_index].room_id = "Salió"
      fm.create_client_txt(clients,clients_file)


      room_id_index = 0
      end_search = False
      found_rooms = []
      while end_search == False:
        
        if room_id_index < len(clients):
          
          found_index = search_available(clients,room_id_index,room_id,4)
          if found_index != "No encontrado":
            found_rooms.append(found_index)
            
          
        else:
          end_search = True
        room_id_index += 1
      print(len(found_rooms))
      if len(found_rooms) == 0:
        i = 0
        end_search = False
        while i < len(cruise) and end_search == False:
          room_index = search_available(cruise[i],0,room_id,4)
          if room_index != "No encontrado":
            cruise[i][room_index].status = "Disponible"
            end_search = True
          i += 1
        
        file_name = "rooms_cruise"+str(cruise_answer)+".txt"
        fm.create_cruise_txt(cruise,file_name)
      
      
    else:
      print("Este cliente no se encuentra en la base de datos")

  else:

    print("No hay clientes hospedados en este crucero")
Ejemplo n.º 6
0
def sell_room(cruise,data_base,cruise_answer,file_name):
  
  """
  Cruise: lista con informacion de las habitaciones del crucero, esta compuesta por listas por cada tipo de habitacion

  data_base: base de datos 

  cruise_answer: crucero seleccionado

  file_name: nombre del archivo de texto donde se almacenaran los datos de las habitaciones del respectivo crucero


  """
  
  r_type_answer,r_type_key = select_room_type()
  
  #Se busca si hay habitaciones del tipo seleccionado disponibles
  first_index = search_available(cruise[r_type_answer-1],0,"Disponible",1)
  
 


  
  #Primero se valida si existe un archivo con los datos de clientes hospedados en el crucero, de ser asi se llena una lista con los datos guardados en el mismo, de lo contrario se crea la lista vacía
  clients_file = "clients_cruise"+str(cruise_answer)+".txt"
  count_clients = fm.check_empty(clients_file)
  if count_clients:
    clients = []
  else:
    clients = fm.fill_clients(clients_file)
    print('Clientes lleno')
  #clients = []


  # Si no encontró habitacion disponible, significa que todas las habitaciones de ese tipo se encuentran ocupadas
  if first_index != "No encontrado":
    show_floors(cruise,r_type_answer)
    print("")
    
        
        
    people_quantity = input_people_quantity()
        
    #Habitaciones rentadas
    room_rented = 1

    #lista con las posiciones de habitaciones disponibles encotradas
    found_rooms = []
    
    found_rooms.append(first_index)
    #Si se desean hospedar mas personas de las que admite una habitacion, se debe aumentar el numero de habitaciones a rentar
    if people_quantity > (room_rented*data_base[cruise_answer-1]["capacity"][r_type_key]):
      while people_quantity > (room_rented*data_base[cruise_answer-1]["capacity"][r_type_key]) and first_index<len(cruise[r_type_answer-1]):

        room_rented +=1
        first_index += 1

        #Se busca si hay mas habitaciones del tipo seleccionado disponibles
        found_index = search_available(cruise[r_type_answer-1],first_index,"Disponible",1)
        if found_index != "No encontrado":
          found_rooms.append(found_index)
        
    # Si la cantidad de habitaciones disponibles encontradas no concuerda con la cantidad de habitaciones que se deben rentar para ocupar a todas las personas indicadas, no se podrá continuar con la operacion.
    if len(found_rooms) == room_rented:
      
      regist_count= 1
      index = 0
     
      new_clients = []
      print(found_rooms)

      #Se procede a realizar la toma de datos para la cantidad de personas que fue ingresada
      while regist_count <= people_quantity and index < (len(found_rooms)):
        print(f"Registro: {regist_count}")
        while True:
          try:

            person = client_register(clients)


            
            client = Client(person.name,person.dni,person.age,person.discapacity,r_type_key,r_type_key[0].upper()+cruise[r_type_answer-1][found_rooms[index]].letter + str(cruise[r_type_answer-1][found_rooms[index]].number),data_base[cruise_answer-1]["cost"][r_type_key],0,0)
            client.payment = payment(client)
            
            base_payment = data_base[cruise_answer-1]["cost"][r_type_key]
            

            if len(clients) != 0:
              
              #Se valida si la persona ya se encontraba registrada
              found = search_available(clients,0,client.dni,2)
              
              if found != "No encontrado":
                
                print("Este numero de cedula ya se encuentra en la base de datos.")
                raise Exception
              else:
                clients.append(client)
                new_clients.append(client)
                regist_confirm = 'Registro Exitoso'
                break
            else:
              clients.append(client)
              new_clients.append(client)
              regist_confirm = 'Registro Exitoso'
              break
          except:
            print("Error. El numero de cedula ya se encuentra en la base de datos")
        cruise[r_type_answer-1][found_rooms[index]].status = "Ocupada"
        
        
        index = regist_count//data_base[cruise_answer-1]["capacity"][r_type_key]
        regist_count +=1

      if regist_confirm == 'Registro Exitoso':  
        print(regist_confirm)
        print(found_rooms)
        #total = 0
        print("\n")

        create_bill(new_clients,base_payment)
        

        
        fm.create_cruise_txt(cruise,file_name)
        fm.append_client_txt(new_clients,clients_file)
        
    else:
      print(f'Lo sentimos, no tenemos suficietes habitaciones {r_type_key} disponibles')
  else:
        print(f'Lo sentimos, no tenemos habitaciones {r_type_key} disponibles')
  
  

  
  return cruise
Ejemplo n.º 7
0
def sell_products(data_base): 


  """

  Funcion que permite vender productos del menu, y almacenar los datos de la venta en los clientes y almacenar productos vendidos

  """

  cruise_answer = select_cruise(data_base)
  clients_file = "clients_cruise"+str(cruise_answer)+".txt"
  count_clients = fm.check_empty(clients_file)
  if count_clients:
    clients = []
  else:
    clients = fm.fill_clients(clients_file)
    print('Clientes lleno')

  dish_file = "restaurant_dishes.txt"
  count_dishes = fm.check_empty(dish_file)
  if count_dishes:
    dishes = []
  else:
    dishes = fm.fill_dishes(dish_file)


  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)


  while True:
    
    try:
      dni = int(input('Por favor ingrese su dni:'))
      break
    except:
      print('Valor invalido. Intente nuevamente')

  if len(clients) == 0:
    print('No se encuentran clientes hospedados en este crucero')
  else:
    search_dni = search_available(clients,0,dni,2)
    if search_dni == "No encontrado":
      print('El numero de cedula ingresado no se encuentra en la base de datos')
    else:

      if clients[search_dni].room_id == "Salió":
        print('El numero de cedula ingresado no se encuentra en la base de datos')
      else:
        while True:

          try:
            
            search_type = input('Menu:\n1. Platos\n2. Combos\nIndique lo que desea buscar: ')
            if search_type != '1' and search_type != '2':
              raise Exception
            
            break

          except:
            print('Valor invalido. Intente nuevamente')
        if search_type == '1':

          if len(dishes) != 0:

            product_answer = select_product(dishes)
            payment = dishes[product_answer-1].price
            #Se actualiza el dato del cliente para denotar que hizo una compra en el restaurante
            clients[search_dni].restaurant += payment

            #Se crea un archivo que almacene los productos vendidos
            fm.create_client_txt(clients,clients_file)

            with open("sold_dishes.txt",'a') as f:

              f.write(f'{dishes[product_answer-1].name}\n')

            bill = f"Nombre: {clients[search_dni].name}\nEdad: {clients[search_dni].age}\nCedula: {clients[search_dni].dni}\nHabitacion: {clients[search_dni].room_id}\nMonto a Pagar: {payment}\nProducto: {dishes[product_answer-1].name} "
            print(bill)
          else:
            print('No hay platos en el menu')

        else:

          if len(combos):

            product_answer = select_product(combos)
            payment = combos[product_answer-1].price
            #Se actualiza el dato del cliente para denotar que hizo una compra en el restaurante
            clients[search_dni].restaurant += payment

            #Se crea un archivo que almacene los productos vendidos
            fm.create_client_txt(clients,clients_file)

            with open("sold_dishes.txt",'a') as f:

              f.write(f'combos[product_answer-1].name\n')

            bill = f"Nombre: {clients[search_dni].name}\nEdad: {clients[search_dni].age}\nCedula: {clients[search_dni].dni}\nHabitacion: {clients[search_dni].room_id}\nMonto a Pagar: {payment}\nProducto: {combos[product_answer-1].name} "
            print(bill)

          print('No se encuentran combos en el menu')
Ejemplo n.º 8
0
def add_dishes():


  """

  Funcion que permite agregar productos al menu

  """

  #Primero se valida si existe un archivo con los datos de platos en el menu, de ser asi se llena una lista con los datos guardados en el mismo, de lo contrario se crea la lista vacía
  dish_file = "restaurant_dishes.txt"
  count_dishes = fm.check_empty(dish_file)
  if count_dishes:
    dishes = []
  else:
    dishes = fm.fill_dishes(dish_file)
    

  continue_answer = '1'
  while continue_answer == '1':

    #Se recogen los datos del nuevo producto que se introducirá al menu
    while True:
      try:
        name = input('Introduzca el nombre del producto: ').title()
        price = float(input('Introduzca el precio del producto: '))
        classification_answer = input('Indique si el producto es (1 - Alimento / 2 - Bebida): ')
        if classification_answer != '1' and classification_answer != '2':
          raise Exception

        break

      except:

        print('Valor invalido. Intente nuevamente')

    if classification_answer == '1':
      classification = 'Alimento'
    else:
      classification = 'Bebida'

    #Si no hay archivos previamente guardados en el menu, se guardan los datos directamente
    if len(dishes) == 0: 
      

      price *= 1.16

      dish = Dish(name,price,classification)

      dishes.append(dish)
      fm.create_dishes_txt(dishes,dish_file)

      continue_answer = input('Presione 1 si desea continuar agregando productos: ')

    else:

      #Si hay archivos previamente guardados en el menu, se debe validar si el producto ya existe en el menu

      search_dish = search_available(dishes,0,name,6)

      if search_dish == "No encontrado":

        price *= 1.16

        dish = Dish(name,price,classification)

        dishes.append(dish)
        fm.create_dishes_txt(dishes,dish_file)
        continue_answer = input('Presione 1 si desea continuar agregando productos: ')

      else:

        print("Este plato ya se encuentra en la base de datos")
        continue_answer = input('Presione 1 si desea continuar agregando productos: ')
Ejemplo n.º 9
0
def search_menu():


  """
  Funcion que permite buscar combos en el menu

  """

  dish_file = "restaurant_dishes.txt"
  count_dishes = fm.check_empty(dish_file)
  if count_dishes:
    dishes = []
  else:
    dishes = fm.fill_dishes(dish_file)


  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)
  search_continue = '1'

  while search_continue == '1':
    while True:

      try:
        
        search_type = input('Menu:\n1. Platos\n2. Combos\nIndique lo que desea buscar: ')
        if search_type != '1' and search_type != '2':
          raise Exception
        search_criteria = input('\nParametros de busqueda:\n1. Nombre\n2. Rango de precios\nSeleccione el parametro de busqueda que desea realizar: ')

        if search_criteria != '1' and search_criteria != '2':
          raise Exception

        break

      except:
        print('Valor invalido. Intente nuevamente')

    if search_criteria == '1':
      if search_type == '1':
        if len(dishes) == 0:
          print('No hay platos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')
        else:
          while True:
            try:
              name = input('Ingrese el nombre del producto que desea buscar: ').title()
              break
            except:
              print('Valor Invalido. Intente nuevamente')
          name_index = search_available(dishes,0,name,6)

          if name_index == "No encontrado":
            print('El producto ingresado no se encuentra en el menu')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            print(f'\nProducto: {dishes[name_index].name}\nClasificación: {dishes[name_index].clasification}\nPrecio: {dishes[name_index].price}\n\n')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
      else:
        if len(combos) == 0:
          print('No hay platos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')
        else:
          while True:
            try:
              name = input('Ingrese el nombre del combo que desea buscar: ').title()
              break
            except:
              print('Valor Invalido. Intente nuevamente')
          name_index = search_available(dishes,0,name,6)

          if name_index == "No encontrado":
            print('El producto ingresado no se encuentra en el menu')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            print(f'\nProducto: {combos[name_index].name}\nProductos: {combos[name_index].products}\nPrecio: {combos[name_index].price}\n\n')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
    else:
      while True:

        try:

          low = float(input('Por favor introduzca el limite inferior del rango de precios: '))
          high = float(input('Por favor introduzca el limite superior del rango de precios: '))
          break
        except:

          print('Valor invalido. Intente nuevamente')


      if search_type == '1':
        if len(dishes) != 0:
          cont = 0
          for i in range(len(dishes)):

            if dishes[i].price >= low and dishes[i].price <= high:

              print(f'\nProducto: {dishes[i].name}\nClasificación: {dishes[i].clasification}\nPrecio: {dishes[i].price}\n\n')
              cont +=1

          if cont == 0:
            print('No se encontraron productos en ese rango de precios')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
        else:

          print('No hay platos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')

      else:
        if len(combos) != 0:
          cont = 0
          for i in range(len(combos)):

            if combos[i].price >= low and combos[i].price <= high:

              print(f'\nProducto: {combos[i].name}\nClasificación: {combos[i].products}\nPrecio: {combos[i].price}\n\n')
              cont +=1

          if cont == 0:
            print('No se encontraron combos en ese rango de precios')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')

        else:

          print('No hay combos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')