Exemplo n.º 1
0
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}')
Exemplo n.º 2
0
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')
Exemplo n.º 3
0
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')
Exemplo n.º 4
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')
Exemplo n.º 5
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)
Exemplo n.º 6
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")
Exemplo n.º 7
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")
Exemplo n.º 8
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
Exemplo n.º 9
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')