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')
def sell_average(data_base):
    """
  Funcion que calcula y muestra el promedio de gastos de un cliente en un crucero 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')
    if len(clients) == 0:

        print('No se encuentran clientes hospedados en este hotel')

    else:

        print(len(clients))
        payments = []
        lista = []
        for i in range(len(clients)):

            payment = clients[i].payment + clients[i].tour

            payments.append(payment)
            lista.append(i)

        average = sum(payments) / len(payments)

        print(f'El promedio de gasto de un cliente es de: {average}')
def delete_combo():

  """

  Funcion que permite eliminar combos del menu

  """


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

  delete_answer = '1'

  while delete_answer == '1':
    if len(combos) == 0:

      print('No hay platos en el menu')
      delete_answer = '0'

    else:
      product_answer = select_product(combos)

      selected_combo = combos[product_answer-1]

      combos.remove(selected_combo)

      fm.create_combos_txt(combos,combo_file)

      delete_answer = input('Presione 1 si desea eliminar otro elemento: ')
def loyal_clients():
    """
  Funcion muestra los 3 clientes que mas dinero gastaron en los cruceros
  
  """

    total_clients = []

    payments = []
    cont = 0
    for cruise_answer in range(1, 5):

        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)

        if len(clients) != 0:

            for i in range(len(clients)):

                total_clients.append(clients[i])

                payment = clients[i].payment + clients[i].tour + clients[
                    i].restaurant

                lista = []

                lista.append(cont)
                lista.append(payment)

                payments.append(lista)
                cont += 1

    if len(payments) != 0 and len(total_clients) != 0:

        payments = sort_vector(payments)

        cont = 0

        index = -1

        while cont < len(payments) and cont < 3 and index > -4:

            print(f'\t{total_clients[payments[index][0]].name}')

            cont += 1
            index -= 1

    else:

        print('No hay clientes hospedados')
def cruise_most_sells(data_base):
    """
  Funcion muestra los 3 cruceros que vendieron mas
  
  """

    payments = []
    cont = 0
    for cruise_answer in range(1, 5):

        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)

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

                amount_money += clients[i].payment

            lista = []

            lista.append(cruise_answer)
            lista.append(amount_money)

            payments.append(lista)
            cont += 1

    if len(payments) != 0:

        #print(payments)
        payments = sort_vector(payments)

        cont = 0

        index = -1

        while cont < len(payments) and cont < 3 and index > -4:

            print(f'\tCrucero: {data_base[payments[index][0]-1]["name"]}')

            cont += 1
            index -= 1

    else:

        print('No hay clientes hospedados')
Beispiel #6
0
def search_room(cruise,cruise_answer,data_base):

  """
  Funcion que maneja los tipos de busqueda de habitacion que se desea realizar

  """

  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')
  for i in range(len(clients)):
    print(clients[i].room_id)
  search_answer = "1"

  while search_answer == "1":

    if len(clients) == 0:
      msg = "No hay clientes hospedados en este crucero"
      print(msg)
      return msg
    #else:
    while True:
      try:
        search_filter = input("Filtros de busqueda:\n1. Tipo\n2. Capacidad\n3. Tipo + Pasillo + Número (ej. SA9)\nSeleccione filtro de busqueda: ")
        if search_filter != '1' and search_filter != '2' and search_filter != '3':
          raise Exception
        break
      except:
        print('Valor invalido. Intente nuevamente')
    if search_filter == '1':
      r_type_answer,r_type_key = select_room_type()
      show_floors(cruise,r_type_answer)
      search_answer = input("Presione 1 si desea realizar otra busqueda: ")
    elif search_filter == '2':
      search_answer = room_capacity_search(cruise)
      
    else: #si search_filter == 3
      search_answer = room_id_search(cruise,clients)
def delete_dish():

  """

  Funcion que permite eliminar productos del 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)
    

  delete_answer = '1'

  while delete_answer == '1':

    # Si la lista de platos esta vacia, no se puede continuar con la operacion ya que no hay platos para eliminar
    if len(dishes) == 0:

      print('No hay platos en el menu')
      delete_answer = '0'

    else:
      product_answer = select_product(dishes)

      selected_dish = dishes[product_answer-1]

      dishes.remove(selected_dish)

      fm.create_dishes_txt(dishes,dish_file)

      delete_answer = input('Presione 1 si desea eliminar otro elemento: ')
Beispiel #8
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")
Beispiel #9
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")
Beispiel #10
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
def restaurants_most_sells():
    """
  Funcion muestra los 5 productos mas vendidos del restaurante
  
  """

    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)

    count_sells = fm.check_empty("sold_dishes.txt")

    if count_sells:

        print('Por el momento no hay productos vendidos')

    else:

        sells = []

        with open("sold_dishes.txt") as f:
            for line in f:
                sell = line[:-1]

                sells.append(sell)

        sells_quantities = []
        if len(dishes) != 0:
            for i in range(len(dishes)):

                product_quantity = sells.count(dishes[i].name)
                lista = []
                lista.append(dishes[i].name)
                lista.append(product_quantity)

                sells_quantities.append(lista)

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

                product_quantity = sells.count(combos[i].name)
                lista = []
                lista.append(combos[i].name)
                lista.append(product_quantity)

                sells_quantities.append(lista)

                sells_quantities.append(lista)
            print(lista)
        if len(sells_quantities) != 0:

            sells_quantities = sort_vector(sells_quantities)
            #print(sells_quantities)
            cont = 0

            index = -1
            print('\nLos productos mas vendidos del restaurante son:\n')

            while cont < len(sells_quantities) and cont < 5 and index > -6:

                print(f'\t{sells_quantities[index][0]}')

                cont += 1
                index -= 1
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')
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: ')
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: ')
def create_combo():


  """

  Funcion que permite agregar combos 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)

  #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
  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)
  
  
  

  if len(dishes) == 0:

    print("No hay productos en el menu")
  else:
    
    more_dishes = '1'
    combo_products = ""
    count = 1
    
    while more_dishes == '1':
      print("Seleccione el producto que desea agregar al combo\n")
      dish_answer = select_product(dishes)
      combo_products += f"{dishes[dish_answer-1].name}\t"
      

      if count >= 2:
        
        more_dishes = input('\nPresione 1 si desea agregar mas productos al combo')
      count += 1
    
    while True:
      try:
        name = input('Introduzca el nombre del combo: ').title()

        price = float(input('Introduzca el precio del producto: '))
        

        break

      except:

        print('Valor invalido. Intente nuevamente')
    price *= 1.16

    

    combo = Combo(name,price,combo_products)
    combos.append(combo)
    fm.create_combos_txt(combos,combo_file)
def modify_dish():

  """

  Funcion que permite modificar productos del 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':
    # Si la lista de platos esta vacia, no se puede continuar con la operacion ya que no hay platos para modificar
    if len(dishes) == 0:

      print('No hay platos en el menu')
      continue_answer = '0'

    else:
      
      product_answer = select_product(dishes)

      while True:

        try:
          atribute_answer = input('Atributos:\n1. Nombre\n2. Precio\n3.Clasificación\nSeleccione el atributo que desea modificar: ')

          if atribute_answer != '1' and atribute_answer != '2' and atribute_answer != '3':

            raise Exception

          if atribute_answer == '1':
            new_name = input('Introduzca el nuevo nombre del producto: ').title()
          elif atribute_answer == '2':
            
            new_price = float(input('Introduzca el nuevo precio del producto: '))
          else:
            clasification_answer = input('Indique la nueva clasificacion del producto (1 - Alimento / 2 - Bebida): ')
            if clasification_answer != '1' and clasification_answer != '2':
              raise Exception
          

          break

        except:

          print('Valor invalido. Intente nuevamente')

      if atribute_answer == '1':

        dishes[product_answer-1].name = new_name 
        fm.create_dishes_txt(dishes,dish_file)
        continue_answer = input('Presione 1 si desea modificar otro elemento: ')

      elif atribute_answer == '2':
        new_price *= 1.16
        dishes[product_answer-1].price = new_price
        fm.create_dishes_txt(dishes,dish_file)
        continue_answer = input('Presione 1 si desea modificar otro elemento: ')

      else:
        if clasification_answer == '1':
          clasification = 'Alimento'

          dishes[product_answer-1].clasification = clasification
          fm.create_dishes_txt(dishes,dish_file)
          continue_answer = input('Presione 1 si desea modificar otro elemento: ')
        else:
          clasification = 'Bebida'
        
          dishes[product_answer-1].clasification = clasification
          fm.create_dishes_txt(dishes,dish_file)
          continue_answer = input('Presione 1 si desea modificar otro elemento: ')