Example #1
0
def reservar_tickets(user, dias, id_log, unit):
    """ Reserva tickets de acuerdo a los días pasados como parametros para ese
    usuario. """
    data = {}
    tickets_reservados = []
    dias_full = []
    for dia in dias:
        disponibles = get_tickets_libres(dia)
        if disponibles:
            data['id_dia'] = get_id_dia(dia)
            data['importe'] = get_categoria_importe(user['id_categoria'])
            data['unidad'] = unit  # terminal o web
            data['estado'] = 1  # reservado
            fecha = str(int(time()))
            data['barcode'] = fecha
            update_tickets_dia(data['id_dia'])  # tickets_vendidos + 1
            id_ticket = db.tickets.insert(**data)
            db.commit()
            # agregar el ticket y el día como reservado
            tickets_reservados.append((id_ticket, data['id_dia']))
            insert_ticket_log(id_ticket, id_log)
            id_ticket = str(id_ticket)
            codigo = fecha + '0' * (10 - len(id_ticket)) + id_ticket
            db(db.tickets.id == id_ticket).update(barcode=codigo)
            db.commit()
        else:
            # agregar el día como no disponible
            dias_full.append(dia)
        data = {}
    if len(dias) == (len(tickets_reservados) + len(dias_full)):
        return tickets_reservados, dias_full, 1
    else:
        return tickets_reservados, dias_full, 0
Example #2
0
def comprar_tickets(tickets_reservados, id_log):
    """ compra los tickets reservados al cambiarles el estado de reservado(1)
    a impresos(2) e inserta el log de compra para cada ticket."""
    for id_ticket, dia in tickets_reservados:
        insert_ticket_log(id_ticket, id_log)
        db(db.tickets.id == id_ticket).update(estado=2)
        db.commit()
Example #3
0
def cancelar_tickets(tickets_reservados):
    """ Cancela los tickets pasados como parametro cambiando el estado de
    reservado(1) a cancelado (5) y aumenta los tickets disponibles para ese
    día."""
    for id_ticket, id_dia in tickets_reservados:
        db(db.tickets.id == id_ticket).update(estado=5)
        db.commit()
        update_tickets_dia(id_dia, band=0)
Example #4
0
def update_activo(user, valor):
    """
    Actualiza el campo activo de un usuario(user) con el valor dado.
    valor = 1 -> usuario activo(logueado en el sistema)
    valor = 0 -> usuario inactivo(no está logueado en el sistema)
    """
    db(db.usuarios.dni == user['dni']).update(activo=valor)
    db.commit()
Example #5
0
def update_saldo(user, importe, band):
    """
    Actualiza el saldo del user de acuerdo al importe del ticket.
    Si band = 0 anulación/carga => suma el saldo
    Si band = 1 compra => resta el saldo
    """
    if band:
        db(db.usuarios.dni == user['dni']).update(
                                            saldo=db.usuarios.saldo - importe)
    else:
        db(db.usuarios.dni == user['dni']).update(
                                            saldo=db.usuarios.saldo + importe)
    db.commit()
Example #6
0
def get_ticket(user, date):
    """
    Retorna la fila de un ticket si hay un ticket activo de ese usuario para
    ese día, en caso contrario retorna False."""
    tickets = db((db.tickets.id_dia == db.dias.id) &
            (db.tickets.id == db.tickets_log_usuarios.id_ticket) &
            (db.tickets_log_usuarios.id_log_usuario == db.log_usuarios.id) &
            (db.log_usuarios.dni == db.usuarios.dni))
    rows = tickets((db.usuarios.dni == user['dni']) &
            (db.dias.fecha == date) &
            ((db.tickets.estado == 2) |
            (db.tickets.estado == 1) |
            (db.tickets.estado == 3))).select(db.dias.fecha,
                            db.tickets.importe, db.tickets.estado,
                            db.tickets.id, db.tickets.barcode)
    if rows:
        row = rows.first()
        fila = {}
        fila['fecha'] = row['dias']['fecha']
        fila['importe'] = row['tickets']['importe']
        fila['estado'] = row['tickets']['estado']
        fila['id'] = row['tickets']['id']
        fila['barcode'] = row['tickets']['barcode']
        return fila
    else:
        return None
Example #7
0
def get_log(unidad, accion, date=datetime.now()):
    """ Obtiene el log de cierta accion en cierta maquina el dia de hoy. """
    rows = db((db.log_usuarios.id_accion == get_id_accion(accion)) &
              (db.log_usuarios.lugar == unidad)).select(db.log_usuarios.ALL)
    for row in rows:
        if row.fecha.strftime('%Y-%m-%d') == date.strftime('%Y-%m-%d'):
            return row
Example #8
0
def get_hora_cierre(unidad, date=datetime.now()):
    """ Obtiene la hora de cierre de la maquina. """
    rows = db((db.log_usuarios.id_accion == get_id_accion('retiro')) &
              (db.log_usuarios.lugar == unidad)).select(db.log_usuarios.ALL)
    for row in rows:
        if row.fecha.strftime('%Y-%m-%d') == date.strftime('%Y-%m-%d'):
            return row.fecha.strftime('%H:%M:%S')
Example #9
0
def get_dias(user, limit, date=datetime.now()):
    """
    Retorna una lista de limit cantidad de dias que tengan tickets
    disponibles a partir de la fecha de hoy."""
    cantidad = get_count_tickets(user)
    weekdays = {0: 'Lu', 1: 'Ma', 2: 'Mi', 3: 'Ju', 4: 'Vi'}
    lista_nombres = []
    lista_dias = []
    if limit > cantidad:
        limit -= cantidad
        hora = get_hora_compra()
        if date.hour >= hora:
            date = date + relativedelta(days=1)
        rows = db((db.dias.tickets_vendidos < db.dias.tickets_totales) &
                (db.dias.fecha >= date.date())).select(db.dias.fecha,
                                        orderby=db.dias.fecha)
        for row in rows:
            if ((not get_ticket(user, row.fecha)) and
                    (len(lista_dias) < limit)):
                fecha = "%s %s" % (weekdays[row.fecha.weekday()],
                                                row.fecha.strftime('%d/%m/%Y'))
                lista_nombres.append(fecha)
                lista_dias.append(row.fecha)
        return lista_dias, lista_nombres
    else:
        return lista_dias, lista_nombres
Example #10
0
def get_usuario(dni):
    """Retorna una fila de usuario en base a un dni dado"""
    rows = db(db.usuarios.dni == dni).select()
    if rows:
        return rows.first()
    else:
        return None
Example #11
0
def get_estado(id_maquina):
    """Obtiene el estado actual de la maquina dado su id."""
    row = db(db.maquinas.id == id_maquina).select().first()
    if row:
        return row.estado
    else:
        return None
Example #12
0
def get_ubicacion(id_maquina):
    """ Obtiene la ubicación de una maquina de acuerdo al número """
    row = db(db.maquinas.id == id_maquina).select().first()
    if row:
        return get_facultad(row.ubicacion)
    else:
        None
Example #13
0
def get_videos():
    """ Obtiene la ruta, nombre y título de los videos de ayuda. """
    rows = db().select(db.videos.ruta, db.videos.nombre, db.videos.titulo)
    diccionario = {}
    for row in rows:
        diccionario[row['nombre']] = [row['ruta'], row['titulo']]
    return diccionario
Example #14
0
def get_maquina_ubicacion(id_facultad):
    """Retorna el id de una maquina dado el id de una facultad"""
    row = db(db.maquinas.ubicacion == id_facultad).select().first()
    if row:
        return row.id
    else:
        return None
Example #15
0
def get_tickets_disponibles(date=datetime.now()):
    """Devuelve los tickets disponibles para la semana dado cierto día. Por
    defecto para el día de hoy. """
    hora_actual = date.hour
    hora_compra = get_hora_compra()
    anio, sem, dow = date.isocalendar()
    dias_hab = {
        1: 'Lunes',
        2: 'Martes',
        3: 'Miercoles',
        4: 'Jueves',
        5: 'Viernes',
        6: 'Sábado',
        7: 'Domingo'
    }
    semana = {}
    if hora_compra >= hora_actual:
        row = db(db.dias.fecha == date.date()).select(db.dias.ALL).first()
        if row:
            disponibles = row.tickets_totales - row.tickets_vendidos
            disponibles = str(disponibles)
        else:
            disponibles = '0'
    else:
        disponibles = '0'
    semana['dia1'] = [dias_hab[dow], date.strftime('%d/%m/%Y'), disponibles]
    semana['dia2'] = get_next_day(date)
    semana['dia3'] = get_next_day(semana['dia2'][3])
    semana['dia4'] = get_next_day(semana['dia3'][3])
    semana['dia5'] = get_next_day(semana['dia4'][3])
    return semana
Example #16
0
def update_tickets_dia(id_dia, cantidad=1, band=1):
    """
    Actualiza la cantidad de tickets vendidos de acuerdo a band en cant veces.

        band = 1 -> compra aumenta la cantidad de tickets vendidos
        band = 0 -> anulación disminuye la cantidad de tickets vendidos
    """
    if band:
        db(db.dias.id == id_dia).update(
            tickets_vendidos=db.dias.tickets_vendidos + cantidad
            )
    else:
        db(db.dias.id == id_dia).update(
            tickets_vendidos=db.dias.tickets_vendidos - cantidad
        )
    db.commit()
Example #17
0
def get_ticket_grupal_by_id(id_ticket):
    """ Retorna la fila de un ticket grupal de acuerdo al id_ticket """
    rows = db(
            (db.tickets_grupales.id == id_ticket) &
            (db.tickets_grupales.id_dia == db.dias.id)).select(
                                                db.dias.fecha,
                                                db.tickets_grupales.importe,
                                                db.tickets_grupales.id,
                                                db.tickets_grupales.cantidad,
                                                db.tickets_grupales.delegacion,
                                                db.tickets_grupales.recibo,
                                                db.tickets_grupales.barcode
            )
    if rows:
        row = rows.first()
        fila = {}
        fila['fecha'] = row['dias']['fecha']
        fila['importe'] = row['tickets_grupales']['importe']
        fila['delegacion'] = row['tickets_grupales']['delegacion']
        fila['recibo'] = row['tickets_grupales']['recibo']
        fila['cantidad'] = row['tickets_grupales']['cantidad']
        fila['id'] = row['tickets_grupales']['id']
        fila['barcode'] = row['tickets_grupales']['barcode']
        return fila
    else:
        return None
Example #18
0
def get_ticket_cierre(id_ticket):
    """ Obtiene el ticket de cierre de acuerdo al id. """
    row = db(db.tickets_cierre.id == id_ticket).select().first()
    if row:
        return row
    else:
        return None
Example #19
0
def insert_ticket_cierre(id_log, total, unidad):
    """ Registra el ticket de cierre de acuerdo al total de dinero retirado y
    la maquina donde se hace. """
    data = {}
    data['fecha'] = datetime.now()
    data['total'] = total
    data['id_log_usuario'] = id_log
    data['id_maquina'] = unidad
    fecha = str(int(time()))
    data['barcode'] = fecha
    id_ticket = db.tickets_cierre.insert(**data)
    db.commit()
    id_ticket = str(id_ticket)
    codigo = fecha + '0' * (10 - len(id_ticket)) + id_ticket
    db(db.tickets_cierre.id == id_ticket).update(barcode=codigo)
    db.commit()
    return id_ticket
Example #20
0
def get_papel_disponible(id_maquina):
    """ Obtiene la cantidad de tickets que se pueden imprimir una vez
    que tiene poco papel."""
    row = db(db.maquinas.id == id_maquina).select().first()
    if row:
        return row.tickets_disponibles
    else:
        return None
Example #21
0
def get_maquina(ubicacion):
    """Obtiene el número de maquina de acuerdo a su ubicación. """
    id_facultad = get_id_facultad(ubicacion)
    row = db(db.maquinas.ubicacion == id_facultad).select().first()
    if row:
        return row.id
    else:
        return None
Example #22
0
def anular_ticket(id_ticket, user, unidad):
    """
    Anula el ticket a traves de su id actualizando el estado.
    estado = 3 -> consumido
    estado = 2 -> impreso
    estado = 1 -> activo
    estado = 0 -> anulado
    Además inserta en el log el ticket anulado, actualiza el saldo
    y los tickets vendidos de ese día.
    """
    db(db.tickets.id == id_ticket).update(estado=0)
    db.commit()
    id_log = insert_log(user, 'anular', unidad)
    insert_ticket_log(id_ticket, id_log)
    importe = get_importe_ticket(id_ticket)
    update_saldo(user, importe, 0)
    update_tickets_dia(get_dia_ticket(id_ticket), band=0)
Example #23
0
def get_all_facultades():
    """Obtiene todas las facultades y devuelve un diccionario:
        clave nombre, valor id"""
    facultades = {}
    rows = db().select(db.facultades.id, db.facultades.nombre)
    for row in rows:
        facultades[row['nombre']] = row['id']
    return facultades
Example #24
0
def get_hora_inicio(unidad, date=datetime.now()):
    """ Obtiene la hora de inicio de la maquina. """
    rows = db((db.log_usuarios.id_accion == get_id_accion('iniciar')) &
              (db.log_usuarios.lugar == unidad)).select(db.log_usuarios.ALL)
    for row in rows:
        if (row.fecha.strftime('%Y-%m-%d') == date.strftime('%Y-%m-%d')
                                                and "1er" in row.descripcion):
            return row.fecha.strftime('%H:%M:%S')
Example #25
0
def get_alumno(lu, dni):
    """ Obtiene el id de un alumno si que es existe el par lu y dni. """
    rows = db((db.alumnos.lu == lu) & (db.alumnos.dni == dni)).select()
    if rows:
        row = rows.first()
        return row.id
    else:
        return None
Example #26
0
def get_id_ticket_cierre(unidad, date=datetime.now()):
    """ Obtiene el id del ticket de  cierre de acuerdo al día
    y a la unidad. """
    rows = db(db.tickets_cierre.id_maquina == unidad).select()
    for row in rows:
        if row.fecha.strftime('%Y-%m-%d') == date.strftime('%Y-%m-%d'):
            return row.id
    return None
Example #27
0
def get_all_provincias():
    """Obtiene todas las provincias y devuelve un diccionario:
        clave nombre, valor id"""
    provincias = {}
    rows = db().select(db.provincias.id, db.provincias.nombre)
    for row in rows:
        provincias[row['nombre']] = row['id']
    return provincias
Example #28
0
def update_totales_dia(id_dia, cantidad=1, band=1):
    """
    Actualiza la cantidad de tickets totales de acuerdo a band en cantidad
    de veces:

        band = 1 -> aumenta la cantidad de tickets totales
        band = 0 -> disminuye la cantidad de tickets totales
    """
    if band:
        db(db.dias.id == id_dia).update(
            tickets_totales=db.dias.tickets_totales + cantidad
        )
    else:
        db(db.dias.id == id_dia).update(
            tickets_totales=db.dias.tickets_totales - cantidad
        )
    db.commit()
Example #29
0
def update_ticket_grupal(id_ticket, user, unidad, state):
    """ Actualiza el estado del ticket por su id.
    estado = 4 -> vencido
    estado = 3 -> consumido
    estado = 2 -> impreso
    estado = 1 -> reservado
    estado = 0 -> anulado
    """
    db(db.tickets_grupales.id == id_ticket).update(id_estado=state)
    db.commit()
    if state == 2:
        id_log = insert_log(user, 'imprimir_grupal', unidad)
        insert_ticket_grupal_log(id_ticket, id_log)
    elif state == 0:
        id_log = insert_log(user, 'anular_grupal', unidad)
        insert_ticket_grupal_log(id_ticket, id_log)
    else:
        pass
Example #30
0
def get_cant_ticket_grupal(id_ticket):
    """
    Retorna la cantidad del día del ticket grupal a traves de su id,
    en caso de no encontrar ninguno retorna None
    """
    row = db(db.tickets_grupales.id == id_ticket).select().first()
    if row:
        return row.cantidad
    else:
        return None