Funciones y Procedimientos para la Gestión de Clientes y Ventas

Estructura de Búsqueda de Clientes

La función buscar_cliente permite localizar un cliente específico en una lista (clientes) basándose en su número de documento.

def buscar_cliente(doc):
    cliente_buscado = None
    for cliente in clientes:
        if cliente["documento"] == doc:
            cliente_buscado = cliente
            break
    return cliente_buscado

Estructura de Registro de Clientes

La función ingresar_cliente solicita al usuario el número de documento y verifica si ya existe un cliente con ese documento. Si no existe, solicita el nombre y el teléfono, crea un nuevo registro de cliente y lo agrega a la lista clientes. Si ya existe, muestra un mensaje indicando que el cliente ya está registrado.

def ingresar_cliente():
    doc = input("Ingrese el documento: ")
    cliente = buscar_cliente(doc)
    if cliente == None:
        # Registro del nuevo cliente.  AGREGAR TODOS LOS REQUISITOS.
        nom = input("Ingrese el nombre: ")
        tel = input("Ingrese el telefono: ")
        nuevo_cliente = {"nombre": nom, "documento": doc, "telefono": tel}
        clientes.append(nuevo_cliente)
        print("Registro exitoso")
    else:
        print("Ya existe un cliente con el documento", doc)

Selección de Paquete (con Validación)

La función paquete solicita al usuario que ingrese el tipo de paquete (premium o basico). Valida la entrada y solo continúa si el tipo de paquete es válido. Luego, solicita el nombre del paquete.

def paquete():
    tipo_de_paquete = input("Tipo de Paquete: ").lower()
    if tipo_de_paquete not in ["premium", "basico"]:
        print("Tipo de paquete inválido.")
        return
    nombre_del_paquete = input("Nombre del Paquete: ")

Solicitud de Fecha

La función solicitar_fecha pide al usuario que ingrese el año, mes y día, y devuelve un objeto date.

from datetime import date
def solicitar_fecha():
    anio = int(input("Ingrese el año: "))
    mes = int(input("Ingrese el mes: "))
    dia = int(input("Ingrese el día: "))
    fecha = date(anio, mes, dia)
    return fecha


Filtrado de Pedidos entre Fechas

La función pedidos_entre_fechas filtra los pedidos de un cliente específico dentro de un rango de fechas proporcionado por el usuario. Muestra las fechas de los pedidos encontrados y el total de pedidos en ese rango. Si no hay pedidos, o si el cliente no existe, muestra un mensaje apropiado.

def pedidos_entre_fechas():
    doc = input("Ingrese documento: ")
    cliente = buscar_cliente(doc)
    if cliente != None:
        cont = 0
        lista_pedidos = []
        print("Ingrese fecha desde: ")
        fecha_desde = solicitar_fecha()
        print("Ingrese fecha hasta: ")
        fecha_hasta = solicitar_fecha()
        for pedido in pedidos:
            if pedido["cliente"]["documento"] == doc and fecha_desde <= pedido["fecha"] and pedido["fecha"] <= fecha_hasta:
                cont += 1
                lista_pedidos.append(pedido)
        if len(lista_pedidos) == 0:
            print("No hay pedidos registrados para el cliente de documento", doc, "entre las fechas", fecha_desde, "y", fecha_hasta)
        else:
            print("Fechas de sus pedidos: ")
            for pedido in lista_pedidos:
                print(pedido["fecha"])
            print("Total de pedidos realizados:", cont)
    else:
        print("No existe un cliente con el documento", doc)

Clientes con Pedidos Superiores a un Monto

La función mostrar_clientes_pedidos_mayor_monto muestra la información (nombre y teléfono) de los clientes cuyos pedidos superan un monto especificado por el usuario.

def mostrar_clientes_pedidos_mayor_monto():
    monto = int(input("Ingrese un monto: "))
    lista_clientes = []
    for pedido in pedidos:
        if pedido["total"] >= monto:
            if pedido["cliente"] not in lista_clientes:
                lista_clientes.append(pedido["cliente"])
    if not lista_clientes:
        print("No hay clientes con pedidos cuyo monto sea superior a", monto)
    else:
        print("Clientes con pedidos superiores al monto:")
        for cliente in lista_clientes:
            print("Nombre:", cliente["nombre"])
            print("Teléfono:", cliente["telefono"])


Consultas Pendientes de Resolución

La función consultas_sin_resolver identifica y muestra los nombres de los clientes que tienen consultas en estado «pendiente».

def consultas_sin_resolver():
    lista_clientes = []
    for consulta in consultas:
        if consulta["estado"] == "pendiente":
            lista_clientes.append(consulta["cliente"])
    if len(lista_clientes) != 0:
        cont = 0
        for cliente in lista_clientes:
            cont += 1
            print(cont, "----", cliente["nombre"])
    else:
        print("No hay ningún cliente con consultas pendientes")

Cálculo de Porcentaje de Vehículos Usados y 0km

La función porcentaje_usados_0km calcula y muestra el porcentaje de vehículos usados y 0km en una lista de automóviles (automoviles).

def porcentaje_usados_0km():
    print("Porcentajes de usados y de nuevos")
    # Inicializa variables para contar la cantidad de vehículos usados y con 0 kilómetros
    cantidad_usados = 0
    cantidad_cero_km = 0
    for vehiculo in automoviles:
        if vehiculo["kms"] == 0:
            # Incrementa la cantidad de vehículos con 0 kilómetros
            cantidad_cero_km += 1
        else:
            # Incrementa la cantidad de vehículos usados
            cantidad_usados += 1
    # Calcula el porcentaje de vehículos con 0 kilómetros respecto al total de vehículos
    porcentaje_cero_km = cantidad_cero_km * 100 / len(automoviles)
    # Calcula el porcentaje de vehículos usados respecto al total de vehículos
    porcentaje_usados = cantidad_usados * 100 / len(automoviles)
    print("El porcentaje de vehiculos usados es:", porcentaje_usados)
    print("El porcentaje de vehiculos cero kilometro es:", porcentaje_cero_km)


Cálculo del Monto Total de Ventas por Mes y Año

La función monto_total_ventas calcula el monto total de las ventas de vehículos 0km realizadas en un mes y año específicos, proporcionados por el usuario.

def monto_total_ventas():
    mes = int(input("Ingrese el mes: "))
    anio = int(input("Ingrese el anio"))
    monto_total = 0
    for venta in ventas:
        if venta["fecha"].month == mes and venta["fecha"].year == anio and venta["vehiculo"]["kms"] == 0:
            monto_total += venta["monto"]
    print("El monto total de las ventas ocurridas en el año", anio, "y en el mes", mes, "fue de:", monto_total)