예제 #1
0
def __anadirCohete():
    # 1
    print('Has seleccionado añadir un cohete de un modelo nuevo')
    idTipo = input('¿Cual es el nombre (identificador) del modelo?: ')
    
    while len(idTipo) < 3:  # 1.1
        input('La palabra debe tener por lo menos 3 caracteres: ')

    # 2
    if datos.leerArchivo(ARCHIVO_COHETES):      # 2.1
        listaCohetes = listarLosCohetes()       # 2.2
        for cohete in listaCohetes:             # 2.3
            if idTipo == cohete['idTipo']:
                print(
                    'Ya existe un tipo de cohete con esa identificacion',
                    'por lo que no se han agregado datos',
                sep='\n')
                return  # 2.3.1
    # 3
    cargaUtil = int(input('¿Cual es la carga util de este tipo de cohete? (en Kg): '))
    # 4
    while cargaUtil < 0:
        print('Ese numero es negativo y... llevar carga negativa es dificil')
        cargaUtil = int(input('Escribe de nuevo la carga util, por favor: '))
    # 5
    nuevoCohete = {
        'idTipo': idTipo,
        'cargaUtil': cargaUtil,
        'cantidad': 1,  # 5.1
    }
    # 6
    datos.guardarEnArchivo(ARCHIVO_COHETES, nuevoCohete)
    print('')
예제 #2
0
def __actualizarDia(diaNuevo):
    # 1
    dicDiaAnterior = datos.leerArchivo(ARCHIVO_DIA)['dia'][0]
    datos.eliminarDeArchivo(ARCHIVO_DIA, dicDiaAnterior)
    # 2
    dicDiaNuevo = {'hoy': diaNuevo}
    datos.guardarEnArchivo(ARCHIVO_DIA, dicDiaNuevo)
예제 #3
0
def cambiarCantidadCohete(coheteAnterior, suma = 1):
    # 1
    coheteNuevo = coheteAnterior.copy()
    # 2
    coheteNuevo['cantidad'] = coheteAnterior['cantidad'] + suma
    # 3
    if coheteNuevo['cantidad'] < 0:
        return False
    # 4
    datos.eliminarDeArchivo(ARCHIVO_COHETES, coheteAnterior)
    datos.guardarEnArchivo(ARCHIVO_COHETES, coheteNuevo)
예제 #4
0
def __anadirPeticion():
    # 1
    print('Has seleccionado realizar una nueva peticion.')
    idPeticion = input('Ingresa el identificador unico de tu peticion: ')

    while len(idPeticion) < 3:  # 1.1
        idPeticion = input('La palabra debe tener por lo menos 3 caracteres: ')

    # 2
    if datos.leerArchivo(ARCHIVO_PETICIONES):  # 2.1
        listaPeticiones = listarLasPeticiones()  # 2.2
        for peticion in listaPeticiones:  # 2.3
            if idPeticion == peticion['idPeticion']:
                print('Ya existe una peticion con esa identificacion',
                      'por lo que no se han agregado datos',
                      sep='\n')
                return  # 2.3.1

    # 3
    descripcion = input('Escribe la descripcion de la peticion: ')

    # 4
    peso = float(input('Introduce el peso en Kg (hasta 3 decimales): '))

    # 5
    while peso < 0:
        print('Ese numero es negativo y... llevar carga negativa es dificil')
        peso = float(input('Escribe de nuevo el peso, por favor: '))

    # 6
    peso = round(peso, 3)
    # 7
    maxDias = int(
        input('Escribe el numero maximo de dias que debe tardar en llegar: '))

    # 8
    while peso < 0:
        print('Ese numero es negativo y... ¿dias negativos?')
        peso = float(input('Escribe de nuevo los dias, por favor: '))

    # 9
    nuevaPeticion = {
        'idPeticion': idPeticion,
        'descripcion': descripcion,
        'peso': peso,
        'maxDias': maxDias,
        'diaPeticion': dias.hoy(),
        'lanzamientoAsignado': 'sin asignar',
    }
    # 10
    datos.guardarEnArchivo(ARCHIVO_PETICIONES, nuevaPeticion)
    print('')
예제 #5
0
def hoy():
    # 1
    if datos.leerArchivo(ARCHIVO_DIA):
        diaHoy = datos.leerArchivo(ARCHIVO_DIA)['dia'][0]['hoy']  # 1.1
        return diaHoy  # 1.2
    # 2
    else:
        diaPorDefecto = {
            'hoy': DIA_INICIAL,  # 2.1
        }
        datos.guardarEnArchivo(ARCHIVO_DIA, diaPorDefecto)  # 2.2
        diaHoy = datos.leerArchivo(ARCHIVO_DIA)['dia'][0]['hoy']  # 2.3
        return diaHoy  # 2.4
예제 #6
0
def __asignar(diasParaLanzamiento = 0):
    # 1
    if not datos.leerArchivo(peticiones.ARCHIVO_PETICIONES):
        print('No hay peticiones registradas')
        return
    
    if not datos.leerArchivo(lanzamientos.ARCHIVO_LANZAMIENTOS):
        print('No hay lanzamientos registrados')
        return

    listaPeticiones = peticiones.listarLasPeticiones()
    listaLanzamientos = lanzamientos.listarLosLanzamientos()

    # 2
    diaDeLanzamiento = dias.hoy() + diasParaLanzamiento

    for lanzamiento in listaLanzamientos:
        
        if lanzamiento['diaLanzamiento'] == 'sin asignar':  # 2.1
            datos.eliminarDeArchivo(lanzamientos.ARCHIVO_LANZAMIENTOS, lanzamiento)
            lanzamiento['diaLanzamiento'] = diaDeLanzamiento
            datos.guardarEnArchivo(lanzamientos.ARCHIVO_LANZAMIENTOS, lanzamiento)

        diaQueLlega = lanzamiento['diaLanzamiento'] + lanzamiento['diasTarda']
        lanzamiento['diaQueLlega'] = diaQueLlega                # 2.2

    # 4
    for peticion in listaPeticiones:
        diaQueDebeLlegar = peticion['maxDias'] + peticion['diaPeticion']
        peticion['diaQueDebeLlegar'] = diaQueDebeLlegar         # 4.1

    # 5
    listaPeticiones = datos.ordenarLista(listaPeticiones, 'diaQueDebeLlegar')
    listaLanzamientos = datos.ordenarLista(listaLanzamientos, 'diaQueLlega')
    
    # 6
    for lanzamiento in listaLanzamientos:
        # 6.0
        if lanzamiento['diaLanzamiento'] < dias.hoy():
            continue
        # 6.1
        lanzamiento['cargaQueCabe'] = __hallarCargaQueCabe(lanzamiento)
        diaQueLlega = lanzamiento['diaQueLlega']
        # 6.2
        for peticion in listaPeticiones:
            # 6.2.1
            if peticion['lanzamientoAsignado'] == 'sin asignar':
                # 6.2.2
                if peticion['diaQueDebeLlegar'] >= diaQueLlega:

                    lanzamiento['cargaQueCabe'] -= peticion['peso'] # 6.2.3

                    if lanzamiento['cargaQueCabe'] < 0: # 6.2.4
                        lanzamiento['cargaQueCabe'] += peticion['peso']

                    else:   # 6.2.5
                        peticion.pop('diaQueDebeLlegar')
                        datos.eliminarDeArchivo(peticiones.ARCHIVO_PETICIONES, peticion)
                        peticion['lanzamientoAsignado'] = lanzamiento['idLanzamiento']
                        datos.guardarEnArchivo(peticiones.ARCHIVO_PETICIONES, peticion)
                        print(
                            peticion['idPeticion'],
                            'ha sido asignada en',
                            lanzamiento['idLanzamiento'],
                            '\n Llegara en ',
                            diaQueLlega - dias.hoy(),
                            'dias',
                        )

    # 7
    haySinAsignar = False

    for peticion in listaPeticiones:

        if peticion['lanzamientoAsignado'] == 'sin asignar':
            haySinAsignar = True
            # 7.1
            if peticion['diaQueDebeLlegar'] < dias.hoy():
                print(
                    'La peticion',
                    peticion['idPeticion'],
                    'ha caducado porque ya tendria que haber llegado...',
                    '\n El dia maximo para llegar era dia',
                    peticion['diaQueDebeLlegar'],
                )
            else:
                print(
                    'Ha sido imposible asignar la peticion',
                    peticion['idPeticion'],
                    'o no cabe o no llegaria a tiempo',
                )

    if not haySinAsignar:
        print('No hay peticiones sin lanzamiento asignado')
    
    print('')