Example #1
0
def pagina_princiapl():
    if request.method == 'GET':
        msgResult = ONT['getLotes_' + str(get_count())]

        gr = Graph()
        gr.add((msgResult, RDF.type, ONT.GetLotes))

        AgentLog = get_agent_info(agn.AgentLogistico, DirectoryAgent,
                                  AgentTransportista, get_count())

        gr2 = infoagent_search_message(AgentLog.address, AgentLog.uri, gr,
                                       msgResult)

        index = 0
        subject_pos = {}
        lista = []
        for s, p, o in gr2:
            if s not in subject_pos:
                subject_pos[s] = index
                lista.append({})
                index += 1
            if s in subject_pos:
                subject_dict = lista[subject_pos[s]]
                if p == RDF.type:
                    subject_dict['url'] = s
                elif p == ONT.id_lote:
                    subject_dict['id_lote'] = o
                    lista[subject_pos[s]] = subject_dict

        return render_template('transportista.html', lotes=lista)
    else:
        if request.form['submit'] == 'Enviado!':

            msgResult = ONT['cobro_' + str(get_count())]

            id_lot = request.form['id_lote']
            gr = Graph()
            body_lote = ONT['id_Lote_' + id_lot]
            gr.add((msgResult, RDF.type, ONT.ProductoEnviado))
            gr.add(
                (body_lote, ONT.id_lote, Literal(id_lot,
                                                 datatype=XSD.integer)))
            AgentLog = get_agent_info(agn.AgentCobrador, DirectoryAgent,
                                      AgentTransportista, get_count())

            gr2 = infoagent_search_message(AgentLog.address, AgentLog.uri, gr,
                                           msgResult)

            return "producto enviado xd"
def browserDevolucion():
    global compras
    if request.method == 'GET':
        logger.info('Se muestran todas las Compras')
        count, counts = getAllCompras()
        return render_template('devolucion.html', compras=compras, count=count, tam=counts)
    else:
        logger.info('Peticon de devolucion')
        devoluciones = []
        for item in request.form.getlist("checkbox"):
            devoluciones.append(compras[int(item)][0])

        g = Graph()
        content = ECSDI['Devolver_producto_' + str(get_count())]
        g.add((content, RDF.type, ECSDI.Devolver_producto))

        for compra in devoluciones:
            g.add((compra, RDF.type, ECSDI.Compra))

        logger.info('AQUI SI')
        agenteDevoluciones = get_agent_info(agn.AgenteDevoluciones, AgenteDirectorio, AgenteExternoAsistentePersonal, get_count())
        logger.info('AQUI NO')

        gm = send_message(
            build_message(g, perf=ACL.request, sender=AgenteExternoAsistentePersonal.uri, receiver=agenteDevoluciones.uri,
                          msgcnt=get_count(),
                          content=content), agenteDevoluciones.address)

        subject = gm.value(predicate=RDF.type, object=ECSDI.Info_transporte)
        transportista = gm.value(subject=subject, predicate=ECSDI.Nombre_transportista)
        logger.info(transportista)
        return render_template('finalDevolucion.html', transportista=transportista)
Example #3
0
def alta():
    if request.method == 'GET':
        return render_template('alta_producto.html')
    else:
        if request.form['submit'] == 'Dar de alta':
            id = str(random.randint(1, 1000000000))
            nombre = request.form['nombre']
            marca = request.form['marca']
            precio = request.form['precio']
            peso = request.form['peso']
            proc = 'externo'

            producto = ONT['Producto_externo_' + id]

            msgResult = ONT['Registrar_' + str(get_count())]

            gr = Graph()
            gr.add((msgResult, RDF.type, ONT.Registrar))

            gr.add((producto, RDF.type, ONT.Producto_externo))
            gr.add((producto, ONT.nombre, Literal(nombre, datatype=XSD.string)))
            gr.add((producto, ONT.marca, Literal(marca, datatype=XSD.string)))
            gr.add((producto, ONT.precio, Literal(precio, datatype=XSD.float)))
            gr.add((producto, ONT.peso, Literal(peso, datatype=XSD.float)))
            gr.add((producto, ONT.id, Literal(id, datatype=XSD.integer)))
            gr.add((producto, ONT.proc, Literal(proc, datatype=XSD.string)))
            gr.add((msgResult, ONT.Producto_externo, producto))
            AgentLog = get_agent_info(agn.AgentLogistico, DirectoryAgent, AgentTiendaExterna, get_count())

            infoagent_search_message(AgentLog.address, AgentLog.uri, gr, msgResult)

            prod = {'pnombre': request.form['nombre'], 'pmarca': request.form['marca'],
                    'pprecio': request.form['precio'], 'ppeso': request.form['peso']}

            return render_template('alta_producto.html', producto=prod)
Example #4
0
def buscar_actividades(type):  # type = ludica/festiva/cultural
    # Creamos el contenido
    content = ECSDI['peticion_de_actividades' + str(get_count())]

    # Creamos los objetos necesarios para las tripletas del grafo

    tipo = ECSDI['tipoActividad' + str(get_count())]

    # Creamos el grafo con las tripletas

    grafo = Graph()

    grafo.add((tipo, RDF.type, ECSDI.ciudadOrigen))
    grafo.add((content, RDF.type, ECSDI.peticion_de_actividades))

    # Preguntamos por el agente que necesitamos
    agente_actividades = get_agent_info(
        agn.AgenteObtenedorDeOfertasDeActividades, DirectoryAgent,
        AgenteProcesador, get_count())

    # Enviamos el mensaje
    gr = send_message(
        build_message(grafo,
                      perf=ACL.request,
                      sender=AgenteProcesador.uri,
                      receiver=agente_actividades.uri,
                      msgcnt=get_count(),
                      content=content), agente_actividades.address)

    # Retornamos el grafo respuesta del mensaje

    return gr
Example #5
0
def buscar_desplazamiento(ciudadNombre='Barcelona'):
    # Creamos el contenido
    content = ECSDI['peticion_de_desplazamiento' + str(get_count())]

    # Creamos los objetos necesarios para las tripletas del grafo

    ciudadOrigen = ECSDI['ciudadOrigen' + str(get_count())]
    ciudadDestino = ECSDI['ciudadDestino' + str(get_count())]

    # Creamos el grafo con las tripletas

    grafo = Graph()

    grafo.add((ciudadOrigen, RDF.type, ECSDI.ciudadOrigen))
    grafo.add((ciudadDestino, RDF.type, ECSDI.ciudadOrigen))
    grafo.add((content, RDF.type, ECSDI.peticion_de_desplazamiento))

    # Preguntamos por el agente que necesitamos
    agente_desplazamiento = get_agent_info(
        agn.AgenteObtenedorDeOfertasDeDesplazamiento, DirectoryAgent,
        AgenteProcesador, get_count())

    # Enviamos el mensaje
    gr = send_message(
        build_message(grafo,
                      perf=ACL.request,
                      sender=AgenteProcesador.uri,
                      receiver=agente_desplazamiento.uri,
                      msgcnt=get_count(),
                      content=content), agente_desplazamiento.address)

    # Retornamos el grafo respuesta del mensaje

    return gr
def comunicacion():
    logger.info("Peticion recibida")
    global mss_cnt
    global dsgraph

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = None

    if msgdic is None:
        gr = build_message(Graph(), ACL['not-understood'], sender=AgenteDevoluciones.uri, msgcnt=get_count())

    else:
        if msgdic['performative'] != ACL.request:
            gr = build_message(Graph(), ACL['not-understood'], sender=AgenteDevoluciones.uri, msgcnt=get_count())

        else:
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            if accion == ECSDI.Devolver_producto:
                logger.info("Peticion de retorno")
                if gm.value(subject=accion, predicate=RDF.type) == ECSDI.Devolucion_insatisfaccion and fuera_plazo(gm, content):  # si se ha comprado hace mas de 15 dias, rechazado
                    gr = build_message(Graph(), ACL['refuse'], sender=AgenteDevoluciones.uri, msgcnt=get_count())
                else:
                    comprasbd = open("../data/productos_pedidos.owl")
                    gcomp = Graph()
                    gcomp.parse(comprasbd, format='turtle')
                    compras = gm.subjects(predicate=RDF.type, object=ECSDI.Compra)
                    pesototal = 0.0
                    logger.info("fuera")
                    for compra in compras:
                        logger.info("dentro")
                        productos = gcomp.objects(subject=compra, predicate=ECSDI.Productos)
                        for prod in productos:
                            gcomp.remove((compra, ECSDI.Productos, prod))
                            peso = gcomp.value(subject=prod, predicate=ECSDI.Peso)
                            logger.info(peso)
                            pesototal += peso.toPython()
                        gcomp.remove((compra,RDF.type, ECSDI.Compra))
                    comprasbd.close()
                    gcomp.serialize(destination='../data/productos_pedidos.owl', format='turtle')

                    gr = Graph()
                    gr.add((content, RDF.type, ECSDI.Devolver_producto))
                    gr.add((content, ECSDI.Peso_lote, Literal(pesototal)))

                    centroLogistico = get_agent_info(agn.AgenteCentroLogistico, AgenteDirectorio, AgenteDevoluciones, get_count())

                    gr = send_message(build_message(gr, perf=ACL.request, sender=AgenteDevoluciones.uri, receiver=centroLogistico.uri, msgcnt=get_count(), content=content), centroLogistico.address)

            else:
                gr = build_message(Graph(), ACL['not-understood'], sender=AgenteDevoluciones.uri, msgcnt=get_count())

    logger.info('Respondemos a la peticion')
    return gr.serialize(format='xml')
Example #7
0
def anadir_producto(request):
    logger.info("Analizando petición de añadir producto")
    id_producto = uuid.uuid4()  #generate a random id
    vendedor = request.form["id_vendedor"]
    nombre = request.form["nombre_producto"]
    precio = int(int(request.form["precio_producto"]) * 100)
    peso = int(request.form["peso"])
    marca = request.form["marca"]
    categoria = request.form["categoria"]
    descripcion = request.form["descripcion_producto"]
    unidades = request.form["unidades"]
    tarjeta = request.form["tarjeta"]

    sujeto = ECSDIAmazon["Anadir_producto" + str(get_message_count())]
    grafo = Graph()
    grafo.add((sujeto, RDF.type, ECSDIAmazon.Anadir_producto))
    grafo.add((sujeto, ECSDIAmazon.Id_producto,
               Literal(id_producto, datatype=XSD.string)))
    grafo.add(
        (sujeto, ECSDIAmazon.Vendedor, Literal(vendedor, datatype=XSD.string)))
    grafo.add((sujeto, ECSDIAmazon.Nombre_producto,
               Literal(nombre, datatype=XSD.string)))
    grafo.add(
        (sujeto, ECSDIAmazon.Precio_producto, Literal(precio,
                                                      datatype=XSD.int)))
    grafo.add((sujeto, ECSDIAmazon.Descripcion_producto,
               Literal(descripcion, datatype=XSD.string)))
    grafo.add(
        (sujeto, ECSDIAmazon.Categoria, Literal(categoria,
                                                datatype=XSD.string)))
    grafo.add((sujeto, ECSDIAmazon.Marca, Literal(marca, datatype=XSD.string)))
    grafo.add(
        (sujeto, ECSDIAmazon.Peso_producto, Literal(peso, datatype=XSD.int)))
    grafo.add(
        (sujeto, ECSDIAmazon.Tarjeta, Literal(tarjeta, datatype=XSD.string)))
    grafo.add((sujeto, ECSDIAmazon.Unidades, Literal(unidades,
                                                     datatype=XSD.int)))

    # logger.info("Cogiendo informacion del AgenteGestorDeProductos")
    agente = get_agent_info(agn.AgenteGestorDeProductos, DirectoryAgent,
                            AgenteVendedorExterno, get_message_count())
    logger.info(
        "Enviando peticion de anadir producto al AgenteGestorDeProductos")
    respuesta_msg = send_message(
        build_message(grafo,
                      perf=ACL.request,
                      sender=AgenteVendedorExterno.uri,
                      receiver=agente.uri,
                      msgcnt=get_message_count(),
                      content=sujeto), agente.address)

    return render_template('prod_anadido.html')
Example #8
0
def contactarCobrador(gm):
    index = 0
    subject_pos = {}
    lista = []
    procedencia = ""
    usuario = ""
    targeta = ""
    id = ""
    precio = 0.0
    for s, p, o in gm:
        if s not in subject_pos:
            subject_pos[s] = index
            lista.append({})
            index += 1
        if s in subject_pos:
            subject_dict = lista[subject_pos[s]]
            if p == RDF.type:
                subject_dict['url'] = s
            elif p == ONT.id:
                id = subject_dict['id'] = o
            elif p == ONT.proc:
                subject_dict['proc'] = o
                procedencia = subject_dict['proc']
            elif p == ONT.precio:
                precio = subject_dict['precio'] = o
            elif p == ONT.targeta:
                targeta = subject_dict['targeta'] = o
            elif p == ONT.usuario:
                usuario = subject_dict['usuario'] = o
                lista[subject_pos[s]] = subject_dict

    msgResult = ONT['cobro2_' + str(get_count())]
    gr = Graph()
    body_prod_dev = ONT['id_Dev_' + id]
    gr.add((msgResult, RDF.type, ONT.ProductoDevuelto))
    gr.add((body_prod_dev, RDF.type, ONT.Producto_devuelto))
    gr.add((body_prod_dev, ONT.id, Literal(id, datatype=XSD.integer)))
    gr.add((body_prod_dev, ONT.proc, Literal(procedencia,
                                             datatype=XSD.string)))
    gr.add((body_prod_dev, ONT.precio, Literal(precio, datatype=XSD.float)))
    gr.add((body_prod_dev, ONT.targeta, Literal(targeta, datatype=XSD.string)))
    gr.add((body_prod_dev, ONT.usuario, Literal(usuario, datatype=XSD.string)))
    gr.add((msgResult, ONT.DevolverProducto, URIRef(body_prod_dev)))
    AgentCobr = get_agent_info(agn.AgentCobrador, DirectoryAgent,
                               AgentDevoluciones, get_count())

    gr2 = infoagent_search_message(AgentCobr.address, AgentCobr.uri, gr,
                                   msgResult)

    return gm
def cobroVenta(precio_quasi_total,precio_envio,tarjeta):
    """Se comunica con el agente financiero para que realice el cobro""" 
    agente_financiero = get_agent_info(agn.AgenteFinanciero, DirectoryAgent, AgenteGestorDeVentas, get_message_count())
    logger.info("Enviando peticion de cobro al AgenteFinanciero")
    # print("La informacion del agente financiero es:")
    # print(agente_financiero.name)
    # print(agente_financiero.address)
    # print(agente_financiero.uri)
    grafo_transaccion = Graph()
    precio_total_final = precio_quasi_total + precio_envio
    contenido = ECSDIAmazon["Transferencia_cobro"+ str(get_message_count())]
    grafo_transaccion.add((contenido, RDF.type, ECSDIAmazon.Transferencia_cobrar))
    grafo_transaccion.add((contenido, ECSDIAmazon.Tarjeta, Literal(tarjeta, datatype=XSD.string)))
    grafo_transaccion.add((contenido, ECSDIAmazon.Precio_total, Literal(precio_total_final, datatype=XSD.int)))
    # Cobro al usuario
    respuesta_cobro = send_message(build_message(
            grafo_transaccion, perf=ACL.request, sender=AgenteGestorDeVentas.uri, receiver=agente_financiero.uri, msgcnt=get_message_count(), 
            content=contenido), agente_financiero.address)
    # print(respuesta_cobro.serialize(format="turtle" ).decode())
    transferencia = respuesta_cobro.value(predicate=RDF.type, object=ECSDIAmazon.Transferencia)
    # print("La transferencia es :", transferencia)
    if "Exitosa" == str(respuesta_cobro.value(subject=transferencia, predicate=ECSDIAmazon.Estado)):
        logger.info("Se ha cobrado la venta exitosamente")
        # mensaje = "Se ha cobrado a su cuenta"
    else:
        logger.info("No se ha podido cobrar la venta exitosamente")
        # mensaje = "Ohoh no se ha podido cobrar a el precio de la venta "
    
    # Pago a vendedor externo    
    # respuesta_pago = send_message(build_message(
    #         grafo_transaccion, perf=ACL.request, sender=AgenteGestorDeVentas.uri, receiver=agente_financiero.uri, msgcnt=get_message_count(), 
    #         content=contenido), agente_financiero.address)
    #
    
    # Datos relevantes a(suponemos que solo hay un agente usuario) del cobro al vendedor externo(solo un vendedor externo)
    logger.info("Se genera el informe con la información de cobro")
    grafo_transaccion = Graph()
    contenido = ECSDIAmazon["Informar"+ str(get_message_count())]
    grafo_transaccion.add((contenido, RDF.type, ECSDIAmazon.Informar))
    grafo_transaccion.add((contenido, ECSDIAmazon.Tarjeta, Literal(tarjeta, datatype=XSD.string)))
    grafo_transaccion.add((contenido, ECSDIAmazon.Precio_total, Literal(precio_total_final, datatype=XSD.float)))
    # grafo_transaccion.add((contenido, ECSDIAmazon.Mensaje, Literal(mensaje, datatype=XSD.string)))
    
    return grafo_transaccion
def browser_cerca():
    """
    Permite la comunicacion con el agente 
    """
    logger.info("Enviando peticion de busqueda")

    # Content of the message
    contentResult = ECSDI['peticion_de_plan' + str(get_count())]

    # Graph creation
    gr = Graph()
    gr.add((contentResult, RDF.type, ECSDI.peticion_de_plan))

    # Obtenemos los datos del formulario, ciudad a visitar y fechas disponibles
    originCity = request.form.get('originCity')
    destinationCity = request.form.get('destinationCity')
    initDate = request.form.get('initDate')
    finDate = request.form.get('finDate')

    logger.info(originCity)
    if originCity:
        city = ECSDI['ciudad' + str(get_count())]
        gr.add((city, RDF.type, ECSDI.ciudad))
        gr.add((city, ECSDI.nombre, Literal(originCity, datatype=XSD.string)))
        # Add restriccio to content
        gr.add((contentResult, ECSDI.tiene_como_destino, URIRef(city)))

        # imprimimos el grafo
        logger.info(gr)

    planificador = get_agent_info(agn.PlannerAgent, DirectoryAgent,
                                  AdministrativeAgent, get_count())
    gresp = send_message(
        build_message(gr,
                      perf=ACL.request,
                      sender=AdministrativeAgent.uri,
                      receiver=planificador.uri,
                      msgcnt=get_count(),
                      content=contentResult), planificador.address)
    return 1
Example #11
0
def buscar_alojamiento(ciudadNombre='Barcelona'):
    # Creamos el contenido
    content = ECSDI['peticion_de_alojamiento' + str(get_count())]

    # Creamos los objetos necesarios para las tripletas del grafo

    ciudad = ECSDI['ciudad' + str(get_count())]
    localizacion = ECSDI['localizacion' + str(get_count())]

    # Creamos el grafo con las tripletas

    grafo = Graph()

    grafo.add((ciudad, RDF.type, ECSDI.ciudad))
    grafo.add((localizacion, RDF.type, ECSDI.localizacion))
    grafo.add((ciudad, ECSDI.nombre, Literal(ciudadNombre)))
    grafo.add((localizacion, ECSDI.pertenece_a, URIRef(ciudad)))
    grafo.add((content, RDF.type, ECSDI.peticion_de_alojamiento))
    grafo.add((content, ECSDI.tiene_como_restriccion_de_localizacion,
               URIRef(localizacion)))

    # Preguntamos por el agente que necesitamos
    agente_alojamiento = get_agent_info(
        agn.AgenteObtenedorDeOfertasDeAlojamiento, DirectoryAgent,
        AgenteProcesador, get_count())

    # Enviamos el mensaje
    gr = send_message(
        build_message(grafo,
                      perf=ACL.request,
                      sender=AgenteProcesador.uri,
                      receiver=agente_alojamiento.uri,
                      msgcnt=get_count(),
                      content=content), agente_alojamiento.address)

    # Retornamos el grafo respuesta del mensaje

    return gr
Example #12
0
def buscar():
    if request.method == 'GET':
        msgResult = ONT['BusquedaRecom' + str(get_count())]
        gr3 = Graph()
        gr3.add((msgResult, RDF.type, ONT.BusquedaRecom))
        grAgentRecom = get_agent_info(agn.AgentRecomendador, DirectoryAgent,
                                      AgentClient, get_count())
        gr4 = infoagent_search_message(grAgentRecom.address, grAgentRecom.uri,
                                       gr3, msgResult)
        index = 0
        recomendaciones1 = []
        del recomendaciones[:]
        subject_pos = {}
        for s, p, o in gr4:
            if s not in subject_pos:
                subject_pos[s] = index
                recomendaciones1.append({})
                index += 1
            if s in subject_pos:
                subject_dict = recomendaciones1[subject_pos[s]]
                if p == RDF.type:
                    subject_dict['url'] = s
                elif p == ONT.marca:
                    subject_dict['marca'] = o
                elif p == ONT.precio:
                    subject_dict['precio'] = o
                elif p == ONT.nombre:
                    subject_dict['nombre'] = o
                elif p == ONT.nvotes:
                    subject_dict['nvotes'] = o
                elif p == ONT.valoracion:
                    subject_dict['valoracion'] = o
                    recomendaciones1[subject_pos[s]] = subject_dict

        for i in range(0, len(recomendaciones1)):
            if float(recomendaciones1[i]['valoracion']) > 3.4:
                recomendaciones.append(recomendaciones1[i])

        return render_template('buscar.html', recomendaciones=recomendaciones)

    else:
        if request.form['submit'] == 'Buscar':
            logger.info("Petición de búsqueda enviada")

            msgResult = ONT['Busqueda' + str(get_count())]

            gr = Graph()
            gr.add((msgResult, RDF.type, ONT.Busqueda))

            nombre = request.form['nombre']
            marca = request.form['marca']
            precio_max = request.form['precio_max']

            if nombre:
                body_nombre = ONT['restriccion_de_nombre' + str(get_count())]
                gr.add((body_nombre, RDF.type, ONT.restriccion_de_nombre))
                gr.add((body_nombre, ONT.nombre,
                        Literal(nombre, datatype=XSD.string)))
                gr.add((msgResult, ONT.Restringe, URIRef(body_nombre)))

            if marca:
                body_marca = ONT['restriccion_de_marca' + str(get_count())]
                gr.add((body_marca, RDF.type, ONT.restriccion_de_marca))
                gr.add(
                    (body_marca, ONT.marca, Literal(marca,
                                                    datatype=XSD.string)))
                gr.add((msgResult, ONT.Restringe, URIRef(body_marca)))

            if precio_max:
                body_precio = ONT['restriccion_de_precio' + str(get_count())]
                gr.add((body_precio, RDF.type, ONT.restriccion_de_precio))
                gr.add((body_precio, ONT.precio_max,
                        Literal(precio_max, datatype=XSD.float)))
                gr.add((msgResult, ONT.Restringe, URIRef(body_precio)))

            grAgentBuscador = get_agent_info(agn.AgentBuscador, DirectoryAgent,
                                             AgentClient, get_count())

            gr2 = infoagent_search_message(grAgentBuscador.address,
                                           grAgentBuscador.uri, gr, msgResult)

            index = 0
            subject_pos = {}
            lista = []
            for s, p, o in gr2:
                if s not in subject_pos:
                    subject_pos[s] = index
                    lista.append({})
                    index += 1
                if s in subject_pos:
                    subject_dict = lista[subject_pos[s]]
                    if p == RDF.type:
                        subject_dict['url'] = s
                    elif p == ONT.marca:
                        subject_dict['marca'] = o
                    elif p == ONT.precio:
                        subject_dict['precio'] = o
                    elif p == ONT.nombre:
                        subject_dict['nombre'] = o
                    elif p == ONT.id:
                        subject_dict['id'] = o
                    elif p == ONT.proc:
                        subject_dict['proc'] = o
                    elif p == ONT.peso:
                        subject_dict['peso'] = o
                        lista[subject_pos[s]] = subject_dict

            total = calcula_precio_carrito()
            return render_template('buscar.html',
                                   productos=lista,
                                   productos_carrito=carrito_compra,
                                   total=total,
                                   recomendaciones=recomendaciones)

        elif request.form['submit'] == 'Al carrito!':
            item = {}
            item["id"] = request.form["id"]
            item["proc"] = request.form["proc"]
            item["marca"] = request.form["marca"]
            item["precio"] = request.form["precio"]
            item["nombre"] = request.form["nombre"]
            item["peso"] = request.form["peso"]
            carrito_compra.append(item)
            total = calcula_precio_carrito()
            return render_template('buscar.html',
                                   productos_carrito=carrito_compra,
                                   total=total,
                                   recomendaciones=recomendaciones)

        elif request.form['submit'] == 'Eliminar':
            idd = request.form["id"]
            ii = -1
            for i in range(0, len(carrito_compra)):
                if carrito_compra[i]["id"] == idd:
                    ii = i
            del carrito_compra[ii]
            total = calcula_precio_carrito()
            return render_template('buscar.html',
                                   productos_carrito=carrito_compra,
                                   total=total,
                                   recomendaciones=recomendaciones)

        elif request.form['submit'] == 'Comprar':
            total = calcula_precio_carrito()
            return render_template('datos_cliente.html',
                                   productos_carrito=carrito_compra,
                                   total=total)

        elif request.form['submit'] == 'Confirmar compra':
            direccion = str(request.form["direccion"])
            nombre = str(request.form["nombre"])
            targeta = str(request.form["targeta"])

            if nombre == "" or targeta == "" or direccion == "":
                total = calcula_precio_carrito()
                error = "Faltan campos por llenar. Por favor, no dejes ningun campo en blanco"
                return render_template('datos_cliente.html',
                                       productos_carrito=carrito_compra,
                                       total=total,
                                       error=error)

            datos = {}

            prioridad = int(request.form["prioridad"])
            if prioridad == 1:
                datos["envio"] = 0
                datos["llegada"] = "7 y 10 dias laborables"
            elif prioridad == 2:
                datos["envio"] = 4.95
                datos["llegada"] = "3 y 6 dias laborables"
            elif prioridad == 3:
                datos["envio"] = 15
                datos["llegada"] = "1 y 2 dias laborables"
            total = calcula_precio_carrito()
            datos["precio"] = round(total / 1.21, 2)
            datos["iva"] = round(total - total / 1.21, 2)
            datos["total"] = total + datos["envio"]
            datos["nombre"] = nombre
            datos["targeta"] = targeta
            datos["direccion"] = direccion

            precio_externo = calcula_precio_externo()

            id_compra = str(random.randint(1, 1000000000))
            gr2 = Graph()
            compra = ONT['Compra_' + id_compra]
            msgResult2 = ONT['Comprar_' + str(get_count())]

            gr2.add((msgResult2, RDF.type, ONT.Comprar))
            gr2.add((compra, RDF.type, ONT.Compra))
            gr2.add(
                (compra, ONT.id_compra, Literal(id_compra,
                                                datatype=XSD.integer)))
            gr2.add(
                (compra, ONT.precio, Literal(datos["total"],
                                             datatype=XSD.float)))
            gr2.add((compra, ONT.precio_externo,
                     Literal(precio_externo, datatype=XSD.float)))
            gr2.add((compra, ONT.nombre, Literal(nombre, datatype=XSD.string)))
            gr2.add((compra, ONT.targeta, Literal(targeta,
                                                  datatype=XSD.string)))
            gr2.add(
                (compra, ONT.direccion, Literal(direccion,
                                                datatype=XSD.string)))
            gr2.add(
                (compra, ONT.prioridad, Literal(prioridad,
                                                datatype=XSD.integer)))
            gr2.add(
                (compra, ONT.peso, Literal(getPesoTotal(),
                                           datatype=XSD.float)))
            gr2.add((compra, ONT.enviado, Literal('false',
                                                  datatype=XSD.boolean)))
            gr2.add((compra, ONT.id_lote, Literal(0, datatype=XSD.integer)))
            gr2.add((compra, ONT.total,
                     Literal(len(carrito_compra), datatype=XSD.integer)))

            AgentVen = get_agent_info(agn.AgentVendedor, DirectoryAgent,
                                      AgentClient, get_count())
            infoagent_search_message(AgentVen.address, AgentVen.uri, gr2,
                                     msgResult2)

            for producto in carrito_compra:
                gr = Graph()
                id_producto = str(random.randint(1, 1000000000))
                producto_a_comprar = ONT['Producto_Comprado_' + id_producto]

                msgResult = ONT['Comprar_Producto_' + str(get_count())]
                gr.add((msgResult, RDF.type, ONT.Comprar_producto))
                gr.add((producto_a_comprar, RDF.type, ONT.Producto_comprado))
                gr.add((producto_a_comprar, ONT.nombre,
                        Literal(producto['nombre'], datatype=XSD.string)))
                gr.add((producto_a_comprar, ONT.marca,
                        Literal(producto['marca'], datatype=XSD.string)))
                gr.add((producto_a_comprar, ONT.proc,
                        Literal(producto['proc'], datatype=XSD.string)))
                gr.add((producto_a_comprar, ONT.precio,
                        Literal(producto['precio'], datatype=XSD.float)))
                gr.add((producto_a_comprar, ONT.id,
                        Literal(producto['id'], datatype=XSD.integer)))
                gr.add((producto_a_comprar, ONT.targeta,
                        Literal(targeta, datatype=XSD.string)))
                gr.add((producto_a_comprar, ONT.usuario,
                        Literal(nombre, datatype=XSD.string)))
                gr.add((producto_a_comprar, ONT.te_feedback,
                        Literal("", datatype=XSD.string)))
                gr.add((msgResult, ONT.Compra, producto_a_comprar))

                infoagent_search_message(AgentVen.address, AgentVen.uri, gr,
                                         msgResult)

            return render_template('factura.html',
                                   productos_carrito=carrito_compra,
                                   datos=datos)

        elif request.form['submit'] == 'Realizar otra compra':
            del carrito_compra[:]
            return render_template('buscar.html',
                                   recomendaciones=recomendaciones)
Example #13
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    logger.info('Peticion de plan recibida')
    global dsGraph

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = None
    respfinal = Graph()
    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentePlanificador.uri,
                           msgcnt=get_count())
    else:
        # Obtenemos la performativa
        if msgdic['performative'] != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=DirectoryAgent.uri,
                               msgcnt=get_count())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia
            # de registro
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)

            # Accion de busqueda
            if accion == ECSDI.Peticion_Transporte:
                transporte = get_agent_info(agn.AgenteTransporte,
                                            DirectoryAgent, AgentePlanificador,
                                            get_count())
                contentmsg = ECSDI['Peticion_Transporte_' + str(get_count())]
                gr = Graph()
                gr.add((contentmsg, RDF.type, ECSDI.Peticion_Transporte))
                grmsg = send_message(
                    build_message(gr,
                                  perf=ACL.request,
                                  sender=AgentePlanificador.uri,
                                  receiver=transporte.uri,
                                  msgcnt=get_count(),
                                  content=contentmsg), transporte.address)

                for (s, p, o) in grmsg:
                    if s == ECSDI['vuelo_1']:
                        respfinal.add((s, p, o))

                alojamiento = get_agent_info(agn.AgenteAlojamiento,
                                             DirectoryAgent,
                                             AgentePlanificador, get_count())
                contentmsg2 = ECSDI['Peticion_Alojamiento_' + str(get_count())]
                gr2 = Graph()
                gr2.add((contentmsg2, RDF.type, ECSDI.Peticion_Alojamiento))
                grmsg2 = send_message(
                    build_message(gr2,
                                  perf=ACL.request,
                                  sender=AgentePlanificador.uri,
                                  receiver=alojamiento.uri,
                                  msgcnt=get_count(),
                                  content=contentmsg2), alojamiento.address)
                for (s, p, o) in grmsg2:
                    if s == ECSDI['Alojamiento_2']:
                        respfinal.add((s, p, o))

                actividades = get_agent_info(agn.AgenteActividades,
                                             DirectoryAgent,
                                             AgentePlanificador, get_count())
                contentmsg3 = ECSDI['Peticion_Actividades_' + str(get_count())]
                gr3 = Graph()
                gr3.add((contentmsg3, RDF.type, ECSDI.Peticion_Actividades))
                grmsg3 = send_message(
                    build_message(gr3,
                                  perf=ACL.request,
                                  sender=AgentePlanificador.uri,
                                  receiver=actividades.uri,
                                  msgcnt=get_count(),
                                  content=contentmsg3), actividades.address)
                for (s, p, o) in grmsg3:
                    if s == ECSDI['Museos_3']:
                        respfinal.add((s, p, o))
                for (s, p, o) in grmsg3:
                    if s == ECSDI['Restaurantes_1']:
                        respfinal.add((s, p, o))

    return respfinal.serialize(format='xml'), 200
Example #14
0
def feedback_devolver():

    if request.method == 'GET':
        msgResult = ONT['Busqueda' + str(get_count())]

        gr = Graph()
        gr.add((msgResult, RDF.type, ONT.Busqueda))
        body_nombre = ONT['productos_usuario' + str(get_count())]
        gr.add((body_nombre, RDF.type, ONT.productos_usuario))
        gr.add((body_nombre, ONT.nombre,
                Literal(nombre_usuario, datatype=XSD.string)))
        gr.add((msgResult, ONT.Restringe, URIRef(body_nombre)))
        grAgentVendedor = get_agent_info(agn.AgentVendedor, DirectoryAgent,
                                         AgentClient, get_count())
        gr2 = infoagent_search_message(grAgentVendedor.address,
                                       grAgentVendedor.uri, gr, msgResult)

        index = 0
        subject_pos = {}
        for s, p, o in gr2:
            if s not in subject_pos:
                subject_pos[s] = index
                productos_comprados.append({})
                index += 1
            if s in subject_pos:
                subject_dict = productos_comprados[subject_pos[s]]
                if p == RDF.type:
                    subject_dict['url'] = s
                elif p == ONT.marca:
                    subject_dict['marca'] = o
                elif p == ONT.precio:
                    subject_dict['precio'] = o
                elif p == ONT.nombre:
                    subject_dict['nombre'] = o
                elif p == ONT.proc:
                    subject_dict['proc'] = o
                elif p == ONT.id:
                    subject_dict['id'] = o
                elif p == ONT.targeta:
                    subject_dict['targeta'] = o
                elif p == ONT.te_feedback:
                    subject_dict['te_feedback'] = o
                    productos_comprados[subject_pos[s]] = subject_dict
        return render_template('feedback_devolver.html',
                               productos=productos_comprados)

    else:

        if request.form['submit'] == 'Devolver producto':
            msgResult = ONT['cobro_' + str(get_count())]

            idd = id = request.form['id']
            proc = request.form['proc']
            precio = request.form['precio']
            targeta = request.form['targeta']
            usuario = nombre_usuario
            gr = Graph()
            body_prod_dev = ONT['id_Dev_' + id]
            gr.add((msgResult, RDF.type, ONT.ProductoDevuelto))
            gr.add((body_prod_dev, ONT.id, Literal(id, datatype=XSD.integer)))
            gr.add((body_prod_dev, ONT.proc, Literal(proc,
                                                     datatype=XSD.string)))
            gr.add(
                (body_prod_dev, ONT.precio, Literal(precio,
                                                    datatype=XSD.float)))
            gr.add((body_prod_dev, ONT.targeta,
                    Literal(targeta, datatype=XSD.string)))
            gr.add((body_prod_dev, ONT.usuario,
                    Literal(usuario, datatype=XSD.string)))
            AgentDev = get_agent_info(agn.AgentDevoluciones, DirectoryAgent,
                                      AgentClient, get_count())

            gr2 = infoagent_search_message(AgentDev.address, AgentDev.uri, gr,
                                           msgResult)

            ii = -1
            for i in range(0, len(productos_comprados)):
                if int(productos_comprados[i]["id"]) == int(idd):
                    ii = i
            del productos_comprados[ii]

            return render_template('feedback_devolver.html',
                                   productos=productos_comprados)

        elif request.form['submit'] == 'Escribir feedback':
            idd = int(request.form["id"])
            ii = -1
            for i in range(0, len(productos_comprados)):
                if int(productos_comprados[i]['id']) == idd:
                    ii = i
            productos_comprados[ii]['te_feedback'] = "si"

            id = str(random.randint(1, 1000000000))
            valoracion = request.form['valoracion']
            marca = request.form['marca']
            precio = request.form['precio']
            nombre = request.form['nombre']
            proc = 'externo'

            producto = ONT['Producto_valorado_' + id]

            msgResult = ONT['Registrar_prod_Valorado_' + str(get_count())]

            gr = Graph()
            gr.add((msgResult, RDF.type, ONT.Registrar_Valoracion))

            gr.add((producto, RDF.type, ONT.Producto_valorado))
            gr.add((producto, ONT.nombre, Literal(nombre,
                                                  datatype=XSD.string)))
            gr.add((producto, ONT.marca, Literal(marca, datatype=XSD.string)))
            gr.add((producto, ONT.precio, Literal(precio, datatype=XSD.float)))
            gr.add((producto, ONT.id, Literal(idd, datatype=XSD.integer)))
            gr.add((producto, ONT.valoracion,
                    Literal(valoracion, datatype=XSD.integer)))
            gr.add((msgResult, ONT.Producto_valorado, producto))
            AgentFeed = get_agent_info(agn.AgentFeedback, DirectoryAgent,
                                       AgentClient, get_count())

            infoagent_search_message(AgentFeed.address, AgentFeed.uri, gr,
                                     msgResult)

            return render_template('feedback_devolver.html',
                                   productos=productos_comprados)
def enviarVenta(contenido,grafo):
    '''Se encarga de enviar asignar el encargo de envio al centro logistico mas cercano al codigo postal'''
    # logger.info("Obteniendo el centro logistico mas cercano al lugar de envio mediante el codigo postal")
    #Obtener el agente mas cercano
    # centrologistico = get_Neareast_Logistic_Center_info(agn.AgenteCentroLogistico, DirectoryAgent, AgenteGestorDeVentas, get_message_count(),int(codepostal))       
    centrologistico = get_agent_info(agn.AgenteCL, DirectoryAgent, AgenteGestorDeVentas, get_message_count())       
    ###ERROR: No esta reemplazando el Iniciar_venta por el Encargo_envio correctamente
    ###Solucionado
    #Reusamos el contenido del grafo antiguo para que se convierta en uno de tipo Encargo_envio
    # logger.info("Haciendo generando encargo envio")
    grafo.remove((contenido, RDF.type, ECSDIAmazon.Iniciar_venta))
    sujeto = ECSDIAmazon['Encargo_envio' + str(get_message_count())]
    grafo.add((sujeto, RDF.type, ECSDIAmazon.Encargo_envio))
    for a, b, c in grafo:
        if a == contenido:
            grafo.remove((a, b, c))
            grafo.add((sujeto, b, c))
    #####
    # print(grafo.serialize(format="turtle").decode())
    logger.info("Informando de encargo de envio a centro logistico")
    msg_respuesta = send_message(build_message(
                                grafo, perf=ACL.request, sender=AgenteGestorDeVentas.uri,receiver=centrologistico.uri,msgcnt=get_message_count(), content=sujeto)
                                , centrologistico.address)
    logger.info("El encargo de envio, ya ha sido enviado por el centro logistico")

    respuesta_centro_logistico = msg_respuesta.value(predicate=RDF.type, object=ECSDIAmazon.Respuesta)
    # print(msg_respuesta.serialize(format="turtle").decode())
    # print("El nombre de la respuesta es:", respuesta_centro_logistico)
    # print(msg_respuesta.value(subject=respuesta_centro_logistico, predicate=ECSDIAmazon.Mensaje))
    if "Enviado" == str(msg_respuesta.value(subject=respuesta_centro_logistico, predicate=ECSDIAmazon.Mensaje)) :
        
        fecha_final = str(msg_respuesta.value(subject=respuesta_centro_logistico, predicate=ECSDIAmazon.Fecha_final))
        transportista_asignado = str(msg_respuesta.value(subject=respuesta_centro_logistico, predicate=ECSDIAmazon.Transportista_asignado))
        precio_envio = float(msg_respuesta.value(subject=respuesta_centro_logistico, predicate=ECSDIAmazon.Precio_envio))
        
        precio_quasi_total = grafo.value(subject=sujeto, predicate=ECSDIAmazon.Precio_total)
        tarjeta = str(grafo.value(subject=sujeto, predicate=ECSDIAmazon.Tarjeta))
        logger.info("Se prodece al cobro")
        grafinfo = cobroVenta(precio_quasi_total, precio_envio, tarjeta)
        informar=grafinfo.value(predicate=RDF.type, object=ECSDIAmazon.Informar)
        #Esta parte esta comentada por que ya esta en el grafoinforme
        #   grafinfo.add((informar, ECSDIAmazon.Tarjeta, Literal(tarjeta, datatype=XSD.string)))
        #   grafinfo.add((informar, ECSDIAmazon.Precio_total, Literal(preciototal, datatype=XSD.float)))
        #   grafinfo.add((informar, ECSDIAmazon.message, Literal(message, datatype=XSD.string)))
        grafinfo.add((informar, ECSDIAmazon.Precio_envio, Literal(precio_envio, datatype=XSD.float)))
        grafinfo.add((informar, ECSDIAmazon.Precio_venta, Literal(precio_quasi_total, datatype=XSD.float)))
        logger.info("Se complementa el informe con la información de envio")
        grafinfo.add((informar, ECSDIAmazon.Fecha_final, Literal(fecha_final, datatype=XSD.string)))
        grafinfo.add((informar, ECSDIAmazon.Transportista_asignado, Literal(transportista_asignado, datatype=XSD.string)))
        idventa = grafo.value(subject=sujeto, predicate=ECSDIAmazon.Id_venta)
        grafinfo.add((informar, ECSDIAmazon.Id_venta, Literal(idventa, datatype=XSD.int)))
        logger.info("Se informa al usuario que la venta con id"+str(idventa)+ "ha sido enviada y cobrada")
        # print(grafinfo.serialize(format = "turtle").decode()) 
        agente_usuario = get_agent_info(agn.AgenteUsuario, DirectoryAgent, AgenteGestorDeVentas, get_message_count())
        msg_respuesta_user = send_message(build_message(
                                grafinfo, perf=ACL.request, sender=AgenteGestorDeVentas.uri,receiver=agente_usuario.uri,msgcnt=get_message_count(), content=informar)
                                , agente_usuario.address)
        respuesta_user= msg_respuesta_user.value(predicate=RDF.type, object=ECSDIAmazon.Respuesta)

        if "OK" == str(msg_respuesta_user.value(subject=respuesta_user, predicate=ECSDIAmazon.Mensaje)):
            logger.info("Finalizado proceso de la venta " + str(idventa) +",la creación, el envio y el cobro de esta han sido exitosos")
        else:
            logger.info("No se esperaba esta respuesta del usuario al enviarle el informe")    
    else:
        logger.info("No se esperaba esta respuesta del centro logistico")
Example #16
0
def browser_registrarProducto():
    """
    Permite la comunicacion con el agente via un navegador
    via un formulario
    """
    if request.method == 'GET':
        return render_template('añadirProducto.html')
    else:
        nombre = request.form['nombre']
        marca = request.form['marca']
        modelo = request.form['modelo']
        precio = request.form['precio']
        peso = request.form['peso']

    content = ECSDI['Integrar_producto_' + str(get_count())]

    logger.info("----0----")

    gr = Graph()
    gr.bind('pont', ECSDI)
    gr.add((content, RDF.type, ECSDI.Integrar_producto))

    logger.info("----1----")

    sProdructo = RESOURCES['Producto_' +
                           str(random.randint(1, sys.float_info.max))]

    logger.info("----2----")

    gr.add((sProdructo, RDF.type, ECSDI.Producto))
    gr.add((sProdructo, PROPS.nombre, Literal(nombre, datatype=XSD.string)))
    gr.add((sProdructo, PROPS.marca, Literal(marca, datatype=XSD.string)))
    gr.add((sProdructo, PROPS.modelo, Literal(modelo, datatype=XSD.string)))
    gr.add((sProdructo, PROPS.precio, Literal(precio, datatype=XSD.float)))
    gr.add((sProdructo, PROPS.peso, Literal(peso, datatype=XSD.float)))

    logger.info("----3----")

    #gr.add((content, ECSDI.producto, sProdructo))

    logger.info("----4----")

    agente = get_agent_info(agn.AgenteNegociadorTiendasExternas,
                            AgenteDirectorio, AgenteExternoTiendaExterna,
                            get_count())

    logger.info("----5----")

    gr = send_message(
        build_message(gr,
                      perf=ACL.request,
                      sender=AgenteExternoTiendaExterna.uri,
                      receiver=agente.uri,
                      content=content,
                      msgcnt=get_count()), agente.address)

    logger.info("----6----")

    res = {
        'marca': request.form['marca'],
        'nombre': request.form['nombre'],
        'modelo': request.form['modelo'],
        'precio': request.form['precio'],
        'peso': request.form['peso']
    }

    return render_template('rootTiendaExterna.html', res=res)
Example #17
0
def crear_lote():
    if request.method == 'GET':
        msgResult = ONT['getProductos_' + str(get_count())]

        gr = Graph()
        gr.add((msgResult, RDF.type, ONT.GetProductos))

        AgentLog = get_agent_info(agn.AgentLogistico, DirectoryAgent,
                                  AgentCentroLogistico, get_count())

        gr2 = infoagent_search_message(AgentLog.address, AgentLog.uri, gr,
                                       msgResult)

        index = 0
        subject_pos = {}
        for s, p, o in gr2:
            if s not in subject_pos:
                subject_pos[s] = index
                compras_sin_asignar.append({})
                index += 1
            if s in subject_pos:
                subject_dict = compras_sin_asignar[subject_pos[s]]
                if p == RDF.type:
                    subject_dict['url'] = s
                elif p == ONT.direccion:
                    subject_dict['direccion'] = o
                elif p == ONT.id_lote:
                    subject_dict['id_lote'] = o
                elif p == ONT.id_compra:
                    subject_dict['id_compra'] = o
                elif p == ONT.peso:
                    subject_dict['peso'] = o
                elif p == ONT.total:
                    subject_dict['total'] = o
                elif p == ONT.prioridad:
                    subject_dict['prioridad'] = o
                    compras_sin_asignar[subject_pos[s]] = subject_dict
                    global id_lote
                    id_lote = str(random.randint(1, 1000000000))

        return render_template('crear_lote.html',
                               productos=compras_sin_asignar)

    else:
        if request.form['submit'] == 'Al lote!':
            idd = int(request.form["id_compra"])
            ii = -1
            for i in range(0, len(compras_sin_asignar)):
                if int(compras_sin_asignar[i]["id_compra"]) == idd:
                    ii = i
            compras_sin_asignar[ii]["id_lote"] = id_lote
            compras_asignadas.append(compras_sin_asignar[ii])
            del compras_sin_asignar[ii]
            if len(compras_sin_asignar) == 0:
                return render_template('crear_lote.html',
                                       productos_lote=compras_asignadas)
            return render_template('crear_lote.html',
                                   productos=compras_sin_asignar,
                                   productos_lote=compras_asignadas)

        if request.form['submit'] == 'Enviar Lote':
            for compra in compras_asignadas:

                compra_asignada = ONT['Compra_Asignada_' + compra['id_compra']]

                msgResult = ONT['Asignar_compra_' + str(get_count())]

                gr = Graph()
                gr.add((msgResult, RDF.type, ONT.Asignar_compra))

                gr.add((compra_asignada, RDF.type, ONT.Compra))
                gr.add((compra_asignada, ONT.id_lote,
                        Literal(id_lote, datatype=XSD.string)))
                gr.add((compra_asignada, ONT.id_compra,
                        Literal(compra['id_compra'], datatype=XSD.string)))
                gr.add((msgResult, ONT.Compra_asignada, compra_asignada))
                AgentLog = get_agent_info(agn.AgentLogistico, DirectoryAgent,
                                          AgentCentroLogistico, get_count())

                infoagent_search_message(AgentLog.address, AgentLog.uri, gr,
                                         msgResult)
            del compras_sin_asignar[:]
            del compras_asignadas[:]
            return redirect(url_for('crear_lote'))
Example #18
0
def browser_cerca():
    """
    Permite la comunicacion con el agente via un navegador
    via un formulario
    """

    if request.method == 'GET':
        return render_template('busqueda.html', plan=None)
    elif request.method == 'POST':
        # Peticio de cerca
        if request.form['submit'] == 'Generar Plan de Viaje':
            logger.info("Enviando peticion de busqueda")

            # Content of the message
            contentResult = ECSDI['Peticion_Traansporte' + str(get_count())]

            # Graph creation
            gr = Graph()
            gr.add((contentResult, RDF.type, ECSDI.Peticion_Transporte))

            ciudad_origen = request.form['ciudad_origen']
            ciudad_destino = request.form['ciudad_destino']
            fecha_ida = request.form['fecha_ida']
            fecha_vuelta = request.form['fecha_vuelta']
            presupuesto = request.form['presupuesto']

            subject = ECSDI["Restricciones"]
            gr.add((subject + "_origen", ECSDI.aeropuerto_ini,
                    Literal(ciudad_origen, datatype=XSD.string)))
            gr.add((subject + "_destino", ECSDI.aeropuerto_fi,
                    Literal(ciudad_destino, datatype=XSD.string)))
            gr.add((subject + "_ida", ECSDI.Fecha_Partida,
                    Literal(fecha_ida, datatype=XSD.string)))
            gr.add((subject + "_vuelta", ECSDI.Fecha_Llegada,
                    Literal(fecha_vuelta, datatype=XSD.string)))
            gr.add((subject + "_precio", ECSDI.Precio,
                    Literal(presupuesto, datatype=XSD.string)))
            gr.add((contentResult, ECSDI.Restinge, URIRef(subject)))

            planificador = get_agent_info(agn.AgentePlanificador,
                                          DirectoryAgent, AgentePersonal,
                                          get_count())

            gr2 = send_message(
                build_message(gr,
                              perf=ACL.request,
                              sender=AgentePersonal.uri,
                              receiver=planificador.uri,
                              msgcnt=get_count(),
                              content=contentResult), planificador.address)

            index = 0
            subject_pos = {}
            flights_list = []
            for s, p, o in gr2:
                if s not in subject_pos:
                    subject_pos[s] = index
                    flights_list.append({})
                    index += 1
                if s in subject_pos:
                    subject_dict = flights_list[subject_pos[s]]
                    if p == RDF.type:
                        subject_dict['url'] = s
                    elif p == ECSDI.aeropuerto_ini:
                        subject_dict['ciudad_origen'] = o
                    elif p == ECSDI.aeropuerto_fi:
                        subject_dict['ciudad_destino'] = o
                    elif p == ECSDI.Fecha_Partida:
                        subject_dict['fecha_ida'] = o
                    elif p == ECSDI.Precio:
                        subject_dict['presupuesto'] = o
                    elif p == ECSDI.Fecha_Llegada:
                        subject_dict['fecha_vuelta'] = o
                    elif p == ECSDI.nombre:
                        subject_dict['nombre_hotel'] = o
                    elif p == ECSDI.direccion:
                        subject_dict['direccion_hotel'] = o
                    elif p == ECSDI.telefono:
                        subject_dict['telefono_hotel'] = o
                    flights_list[subject_pos[s]] = subject_dict
            return render_template('busqueda.html', plan=flights_list)
def browserBuscador():
    """
    Comunicacion con el agente mediante un formulario en un navegador
    """
    global listaProductos
    if request.method == 'GET':
        return render_template('buscador.html', productos=None)
    elif request.method == 'POST':
        #peticion de busqueda
        if request.form['submit'] == 'buscar':
            logger.info("Enviar peticion de busqueda")

            content = ECSDI['BuscarProductos_' + str(get_count())]

            gr = Graph()
            gr.add((content, RDF.type, ECSDI.Buscar))

            modelo = request.form['modelo']
            if modelo:
                # Subject modelo
                sModelo = ECSDI['RestriccioModelo' + str(get_count())]
                gr.add((sModelo, RDF.type, ECSDI.Restriccion_Modelo))
                gr.add((sModelo, ECSDI.Modelo, Literal(modelo, datatype=XSD.string)))
                # Add restriccio to content
                gr.add((content, ECSDI.Restringe, URIRef(sModelo)))

            marca = request.form['marca']
            if marca:
                smarca = ECSDI['RestriccionMarca_' + str(get_count())]
                gr.add((smarca, RDF.type, ECSDI.Restriccion_Marca))
                gr.add((smarca, ECSDI.Marca, Literal(marca, datatype=XSD.string)))
                gr.add((content, ECSDI.Restringe, URIRef(smarca)))

            min_price = request.form['min_price']
            max_price = request.form['max_price']
            if min_price or max_price:
                sPrecio = ECSDI['RestriccionPrecio_' + str(get_count())]
                gr.add((sPrecio, RDF.type, ECSDI.Restriccion_Precio))
                if min_price:
                    gr.add((sPrecio, ECSDI.Precio_min, Literal(min_price)))
                if max_price:
                    gr.add((sPrecio, ECSDI.Precio_max, Literal(max_price)))
                gr.add((content, ECSDI.Restringe, URIRef(sPrecio)))

            buscador = get_agent_info(agn.AgenteBuscador, AgenteDirectorio, AgenteExternoAsistentePersonal, get_count())

            logger.info("He recibido la uri del buscador")
            gr2 = send_message(
                build_message(
                    gr, perf=ACL.request, sender=AgenteExternoAsistentePersonal.uri, receiver=buscador.uri, msgcnt=get_count(), content=content), buscador.address)

            logger.info("Todo feten con la llamada al buscador")
            index = 0
            # posicion del sujeto
            sPos = {}
            listaProductos = []
            for s, p, o in gr2:
                if s not in sPos:
                    sPos[s] = index
                    listaProductos.append({})
                    index += 1
                if s in sPos:
                    sDict = listaProductos[sPos[s]]
                    if p == RDF.type:
                        sDict['url'] = s
                    elif p == ECSDI.Marca:
                        sDict['marca'] = o
                    elif p == ECSDI.Modelo:
                        sDict['modelo'] = o
                    elif p == ECSDI.Precio:
                        sDict['precio'] = o
                    elif p == ECSDI.Nombre:
                        sDict['nombre'] = o
                    elif p == ECSDI.Peso:
                        sDict['peso'] = o
                    listaProductos[sPos[s]] = sDict

            logger.info(listaProductos)
            return render_template('buscador.html', products=listaProductos)

        elif request.form['submit'] == 'comprar':
            productosPedidos = []
            for producto in request.form.getlist("checkbox"):
                productoMarcado = []
                productosMap = listaProductos[int(producto)]
                productoMarcado.append(productosMap['marca'])
                productoMarcado.append(productosMap['modelo'])
                productoMarcado.append(productosMap['nombre'])
                productoMarcado.append(productosMap['precio'])
                productoMarcado.append(productosMap['url'])
                productoMarcado.append(productosMap['peso'])
                productosPedidos.append(productoMarcado)

            logger.info("Creando la peticion de compra")

            # Content of the message
            content = ECSDI['PeticionCompra_' + str(get_count())]

            # Graph creation
            gr = Graph()
            gr.add((content, RDF.type, ECSDI.Peticion_compra))

            tienda = get_agent_info(agn.AgenteCompras, AgenteDirectorio, AgenteExternoAsistentePersonal, get_count())

            # Creacion del sobre (Compra) ------------------------------------------------------------------------------
            subject_sobre = ECSDI['Compra_' + str(random.randint(1, sys.float_info.max))]
            gr.add((subject_sobre, RDF.type, ECSDI.Compra))

            total_price = 0.0
            total_peso = 0.0
            for item in productosPedidos:
                total_price += float(item[3])
                total_peso += float(item[5])
                # Creacion del producto --------------------------------------------------------------------------------
                subject_producto = item[4]
                gr.add((subject_producto, RDF.type, ECSDI.Producto))
                gr.add((subject_producto, ECSDI.Marca, Literal(item[0], datatype=XSD.string)))
                gr.add((subject_producto, ECSDI.Modelo, Literal(item[1], datatype=XSD.string)))
                gr.add((subject_producto, ECSDI.Nombre, Literal(item[2], datatype=XSD.string)))
                gr.add((subject_producto, ECSDI.Precio, Literal(item[3], datatype=XSD.float)))
                gr.add((subject_producto, ECSDI.Peso, Literal(item[5], datatype=XSD.float)))
                gr.add((subject_sobre, ECSDI.Productos, URIRef(subject_producto)))

            gr.add((subject_sobre, ECSDI.Precio_total, Literal(total_price, datatype=XSD.float)))

            gr.add((content, ECSDI.Sobre, URIRef(subject_sobre)))

            logger.info('Llego aqui1')

            send_message(build_message(gr, perf=ACL.request, sender=AgenteExternoAsistentePersonal.uri, receiver=tienda.uri,
                    msgcnt=get_count(), content=content), tienda.address)

            logger.info('Llego aqui2')

            # Graph creation
            gr = Graph()
            gr.add((content, RDF.type, ECSDI.Pedido))

            # Asignar prioridad a la peticion (asignamos el contador de mensaje)
            gr.add((content, ECSDI.Prioridad, Literal(request.form["prioridad"], datatype=XSD.string)))

            gr.add((content, ECSDI.Precio_total, Literal(total_price, datatype=XSD.float)))
            gr.add((content, ECSDI.Peso, Literal(total_peso, datatype=XSD.float)))



            logger.info('Llego aqui')
            respuesta = send_message(
                build_message(
                    gr, perf=ACL.request, sender=AgenteExternoAsistentePersonal.uri, receiver=tienda.uri, msgcnt=get_count(), content=content), tienda.address)

            subject = respuesta.value(predicate=RDF.type, object=ECSDI.Info_transporte)
            precio_transporte = respuesta.value(subject=subject, predicate=ECSDI.Precio)
            nombre_transportista = respuesta.value(subject=subject, predicate=ECSDI.Nombre_transportista)
            fecha_llegada = respuesta.value(subject=subject, predicate=ECSDI.Fecha_entrega)

            logger.info(precio_transporte)
            logger.info(nombre_transportista)
            logger.info('Aqui no llego ni de coña')

            if precio_transporte is not None:
                precio_transporte = precio_transporte.toPython()
                precio_transporte = round(precio_transporte, 2)

            return render_template('finalCompra.html', products= productosPedidos,fecha_llegada=fecha_llegada, precio_total= total_price,precio_transporte=precio_transporte, nombre_transportista= nombre_transportista)
Example #20
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    global dsGraph
    logger.info('Peticion de informacion recibida')

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)


    gr = None

    logger.info('HE LLEGAO AQUI COMPRAS')

    if msgdic is None:
        logger.info('NO ENTIENDO')
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(), ACL['not-understood'], sender=AgenteCompras.uri, msgcnt=get_count())
    else:

        content = msgdic['content']

        if msgdic['performative'] == ACL.request:
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)
            logger.info("He rebut la peticio de request")
            logger.info(accion)
            if accion == ECSDI.Peticion_compra:

                gm.remove((content, None, None))
                for item in gm.subjects(RDF.type, ACL.FipaAclMessage):
                    gm.remove((item, None, None))

                ontologyFile = open('../data/productos_pedidos.owl')
                gr = Graph()
                gr.parse(ontologyFile, format='turtle')
                gr += gm

                # Guardem el graf
                gr.serialize(destination='../data/productos_pedidos.owl', format='turtle')



            elif accion == ECSDI.Pedido:
                logger.info("He rebut la peticio de compra")

                centrologistico = get_agent_info(agn.AgenteCentroLogistico, AgenteDirectorio, AgenteCompras, get_count())
                logger.info('HE LLEGAO AQUI COMPRAS')

                gr = send_message(
                    build_message(gm, perf=ACL.request, sender=AgenteCompras.uri, receiver=centrologistico.uri,
                                  msgcnt=get_count(),
                                  content=content), centrologistico.address)

        elif msgdic['performative'] == ACL.inform:
            Agente = get_agent_info(agn.AgenteExternoAsistentePersonal, AgenteDirectorio, AgenteCompras, get_count())

            # Averiguamos el tipo de la accion
            nom = gm.value(subject=content, predicate=ECSDI.Nombre)
            precio = gm.value(subject=content, predicate=ECSDI.Precio)
            data_arribada = gm.value(subject=content, predicate=ECSDI.Fecha_Final)

            gr = build_message(enviar_info_transporte(nom, precio, data_arribada),
                               ACL['request'],
                               sender=AgenteCompras.uri,
                               receiver=Agente,
                               msgcnt=get_count())

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml'), 200
def communication():
    """
    Communication Entrypoint
    """

    logger.info('Peticion de informacion recibida')
    global dsGraph

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = Graph

    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(), ACL['not-understood'], sender=AgenteObtenedorActividades.uri, msgcnt=get_count())
    else:
        # Obtenemos la performativa
        if msgdic['performative'] != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=DirectoryAgent.uri,
                               msgcnt=get_count())
        else:
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)

            if accion == "peticion de actividades":

                '''localizacion = gm.value(subject=content, predicate=ECSDI.tiene_como_restriccion_de_localizacion)
                ciudad = gm.value(subject=localizacion, predicate=ECSDI.pertenece_a)
                nombreCiudad = gm.value(subject=ciudad, predicate=ECSDI.nombre)'''
                logger.info("Mensaje peticion de actividades")

                agente_ext_actividades = get_agent_info(agn.AgenciaDeTransportes, DirectoryAgent,
                                                        AgenteObtenedorActividades, get_count())

                # Enviamos el mensaje
                gr = send_message(
                    build_message(gr, perf=ACL.request, sender=AgenteObtenedorActividades.uri,
                                  receiver=agente_ext_actividades.uri,
                                  msgcnt=get_count(),
                                  content=content), agente_ext_actividades.address)

                gr = build_message(gr,
                                   ACL['inform-'],
                                   sender=AgenteObtenedorActividades.uri,
                                   msgcnt=mss_cnt,
                                   receiver=msgdic['sender'])

            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_count())

    serialize = gr.serialize(format='xml')
    return serialize, 200
def iniciar_venta(request):
    global lista_de_productos
    logger.info("Analizando la peticion de compra")
    mi_compra = []
    #coge los indices marcados
    for p in request.form.getlist("product_checkbox"):
        mi_compra.append(lista_de_productos[int(p)])
    

    #cogo info de la compra
    tarjeta = str(request.form['tarjeta'])
    direccion = str(request.form['direccion'])
    ciudad = str(request.form['ciudad'])
    codigo_postal = int(request.form['codigo_postal'])
    prioridad = int(request.form['prioridad']) #va entre 1 y 10, de mayor a menor prioridad  

    #preparo el grafo para comunicarme con el AgenteGestorDeVenta
    #accion: Iniciar_venta
    contenido = ECSDIAmazon["Iniciar_venta" + str(get_message_count())]
    grafo_venta = Graph()
    grafo_venta.add((contenido, RDF.type, ECSDIAmazon.Iniciar_venta))
    grafo_venta.add((contenido, ECSDIAmazon.Tarjeta, Literal(tarjeta, datatype=XSD.int)))
    grafo_venta.add((contenido, ECSDIAmazon.Prioridad, Literal(prioridad, datatype=XSD.int)))
    
    direccion_cliente = ECSDIAmazon["Direccion"+ str(get_message_count())]
    grafo_venta.add((direccion_cliente, RDF.type, ECSDIAmazon.Direccion))
    grafo_venta.add((direccion_cliente, ECSDIAmazon.Direccion, Literal(direccion, datatype=XSD.string)))
    grafo_venta.add((direccion_cliente, ECSDIAmazon.Ciudad, Literal(ciudad, datatype=XSD.string)))
    grafo_venta.add((direccion_cliente, ECSDIAmazon.Codigo_postal, Literal(codigo_postal, datatype=XSD.int)))

    venta = ECSDIAmazon["Venta"+str(get_message_count())]
    grafo_venta.add((venta, RDF.type, ECSDIAmazon.Venta))
    grafo_venta.add((venta, ECSDIAmazon.Destino, URIRef(direccion_cliente)))
    logger.info("Mi lista de productos")
    logger.info("Mi compra")
    if not mi_compra:
        return render_template('buscar.html', productos=lista_de_productos, b=True,only_search=False,buy_empty=True)

    for producto in mi_compra:
        s = producto["id_producto"]
        url = ECSDIAmazon
        sujeto = url.term(producto["id_producto"])
        grafo_venta.add((sujeto, RDF.type, ECSDIAmazon.Producto))
        grafo_venta.add((sujeto, ECSDIAmazon.Id_producto, Literal(producto['id_producto'], datatype=XSD.string)))
        grafo_venta.add((sujeto, ECSDIAmazon.Nombre_producto, Literal(producto['nombre_producto'], datatype=XSD.string)))
        grafo_venta.add((sujeto, ECSDIAmazon.Precio_producto, Literal(producto['precio_producto'], datatype=XSD.float)))
        grafo_venta.add((sujeto, ECSDIAmazon.Descripcion_producto, Literal(producto['descripcion_producto'], datatype=XSD.string)))
        grafo_venta.add((sujeto, ECSDIAmazon.Categoria, Literal(producto['categoria'], datatype=XSD.string)))
        grafo_venta.add((sujeto, ECSDIAmazon.Marca, Literal(producto['marca'], datatype=XSD.string)))
        grafo_venta.add((sujeto, ECSDIAmazon.Peso_producto, Literal(producto['peso'], datatype=XSD.int)))
        grafo_venta.add((venta, ECSDIAmazon.Contiene, URIRef(sujeto)))
    
    grafo_venta.add((contenido, ECSDIAmazon.De, URIRef(venta)))
    agente = get_agent_info(agn.AgenteGestorDeVentas, DirectoryAgent, AgenteUsuario, get_message_count())
    logger.info("Enviando peticion de iniciar venta al AgenteGestorDeVentas")
    respuesta_msg = send_message(build_message(
            grafo_venta, perf=ACL.request, sender=AgenteUsuario.uri, receiver=agente.uri, msgcnt=get_message_count(), 
            content=contenido), agente.address)
    
    logger.info("Respuesta recibida")
    
    #obtenemos valores factura, productos y tarjeta asocida a dicha factura de la compra para mostrar al usuario
    venta_factura = respuesta_msg.value(predicate=RDF.type, object=ECSDIAmazon.Factura)
    venta_tarjeta = str(respuesta_msg.value(subject=venta_factura, predicate=ECSDIAmazon.Tarjeta))
    venta_fecha_aproximada = respuesta_msg.value(subject=venta_factura, predicate=ECSDIAmazon.Fecha_aproximada)
    venta_precio_total = float(respuesta_msg.value(subject=venta_factura, predicate=ECSDIAmazon.Precio_total))
    venta_id=str(respuesta_msg.value(subject=venta_factura, predicate=ECSDIAmazon.Id_venta))
    
    venta_productos = respuesta_msg.subjects(object=ECSDIAmazon.Producto)
    productos_factura = []
    for prod in venta_productos:
        product = dict(
            nombre_producto=str(respuesta_msg.value(subject=prod, predicate=ECSDIAmazon.Nombre_producto)),
            precio_producto=float(respuesta_msg.value(subject=prod, predicate=ECSDIAmazon.Precio_producto)),
        )
        productos_factura.append(product)
    productos_factura = sorted(productos_factura, key=lambda p_list: p_list["precio_producto"])
    logger.info("Mostramos la factura recibida")
    #render de factura
    return render_template('factura.html', productos=productos_factura,id_compra=venta_id, tarjeta=venta_tarjeta, precio_total=venta_precio_total,fecha_aproximada = venta_fecha_aproximada)
def peticion_buscar(request):
    global lista_de_productos
    logger.info("Preparando la peticion de busqueda")
    
    #accion: Buscar_productos
    contenido = ECSDIAmazon["Buscar_productos"+str(get_message_count())]
    grafo = Graph()
    grafo.add((contenido, RDF.type, ECSDIAmazon.Buscar_productos))
    
    nombre_producto = request.form["nombre"]
    #agregamos el nombre del producto
    if nombre_producto:
        nombre_sujeto = ECSDIAmazon["Restriccion_nombre" + str(get_message_count)]
        grafo.add((nombre_sujeto, RDF.type, ECSDIAmazon.Restriccion_nombre))
        grafo.add((nombre_sujeto, ECSDIAmazon.Nombre, Literal(nombre_producto, datatype=XSD.string)))
        grafo.add((contenido, ECSDIAmazon.Restringe, URIRef(nombre_sujeto)))
    precio_min = request.form['precio_min']
    precio_max = request.form['precio_max']
    # agregamos el rango de precios
    ## Recordar: El precio se recibe en euros pero se ha de cambiar a centimos de euro
    if precio_min != "" or precio_max != "":
        precio_sujeto = ECSDIAmazon['Restriccion_precio' + str(get_message_count())]
        grafo.add((precio_sujeto, RDF.type, ECSDIAmazon.Restriccion_precio))
        if precio_min != "":
            if precio_min == "0":
                precio_min = 0
            else:
                precio_min = int((float(request.form['precio_min'])*100)//1)

            grafo.add((precio_sujeto, ECSDIAmazon.Precio_minimo, Literal(precio_min)))
        if precio_max != "":
            if precio_max == "0":
                precio_max = 0
            else:
                precio_max = int((float(request.form['precio_max'])*100)//1)
            grafo.add((precio_sujeto, ECSDIAmazon.Precio_maximo, Literal(precio_max)))
        grafo.add((contenido, ECSDIAmazon.Restringe, URIRef(precio_sujeto)))

    #pedimos informacion del agente GestorDeProductos
    logger.info("Cogiendo informacion del AgenteGestorDeProductos")
    agente = get_agent_info(agn.AgenteGestorDeProductos, DirectoryAgent, AgenteUsuario, get_message_count())
    logger.info("Enviando peticion de busqueda al AgenteGestorDeProductos")
    respuesta_msg = send_message(build_message(
            grafo, perf=ACL.request, sender=AgenteUsuario.uri, receiver=agente.uri, msgcnt=get_message_count(), 
            content=contenido), agente.address)

    
    lista_de_productos = []
    for item in respuesta_msg.subjects(RDF.type, ECSDIAmazon.Producto):
        product = dict(
            id_producto=str(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Id_producto)),
            nombre_producto=str(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Nombre_producto)),
            precio_producto=int(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Precio_producto))/100,
            descripcion_producto=str(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Descripcion_producto)),
            categoria=str(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Categoria)),
            marca=str(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Marca)),
            peso=str(respuesta_msg.value(subject=item, predicate=ECSDIAmazon.Peso_producto))
        )
        lista_de_productos.append(product)
    lista_de_productos = sorted(lista_de_productos, key=lambda p_list: p_list["precio_producto"])
    logger.info("Mostramos resultado de la busqueda")
    return render_template('buscar.html', productos=lista_de_productos, b=True,only_search=True)