示例#1
0
 def get_endoso_id_blockchain(self, id_endoso):
     response = self.contract.functions.getEndosoById(id_endoso).call()
     print(response)
     if(response[0] == ''):
         return None
     endoso = Endoso()
     returnDict = endoso.from_blockchain(response)
     return returnDict
示例#2
0
def get_endosos():
    endosos = db.endosos.find()
    pagaresList = list(endosos)
    returnList = []
    for e in pagaresList:
        endoso = Endoso()
        endoso.endosoFromDoc(e)
        returnList.append(vars(endoso))
    return jsonify(returnList)
示例#3
0
def get_endosos_by_pagare(id_pagare):
    endosos = db.endosos.find({'id_pagare': id_pagare})
    pagaresList = list(endosos)
    returnList = []
    for e in pagaresList:
        endoso = Endoso()
        endoso.endosoFromDoc(e)
        returnList.append(vars(endoso))
    return jsonify(returnList)
示例#4
0
def get_endoso_endosatario(id_endosatario):
    endosos = db.endosos.find({"id_endosatario": int(id_endosatario)})
    pagaresList = list(endosos)
    returnList = []
    for e in pagaresList:
        endoso = Endoso()
        endoso.endosoFromDoc(e)
        returnList.append(vars(endoso))
    return jsonify(returnList)
示例#5
0
def get_endoso_id(id_endoso):
    try:
        doc = db.endosos.find_one({"_id": ObjectId(id_endoso)})
    except:
        return "El id es invalido", 400
    if doc == None:
        return "Endoso no encontrado", 404
    endoso = Endoso()
    endoso.endosoFromDoc(doc)
    return vars(endoso)
示例#6
0
def crear_endoso_etapa_2(id_pagare):
    try:
        doc = db.pagares.find_one({"_id": ObjectId(id_pagare)})
    except:
        return "El id es invalido", 400
    if doc == None:
        return "Pagare no encontrado", 404

    pagare = Pagare()
    pagare.pagareFromDoc(doc)
    endoso = Endoso()
    docEndoso = db.endosos.find_one({"id_pagare": id_pagare, "etapa": 1})
    if docEndoso == None:
        print(
            "No existe un endoso pendiente (en etapa 1) para el pagare designado"
        )
        return "No existe un endoso pendiente (en etapa 1) para el pagare designado", 401
    endoso.endosoFromDoc(docEndoso)
    # Revisar que el endoso sea valido
    if not pagare.pendiente:
        print(
            "Error: El pagare {} no está pendiente, puede ser que está vencido o algo"
            .format(pagare._id))
        return "Error: El pagare {} no está pendiente, puede ser que está vencido o algo".format(
            pagare._id)
    if pagare.ultimoEndoso == "null" and endoso.id_endosante != pagare.idAcreedor:
        print("Error: {} no es el acreedor actual del pagare {}".format(
            endoso.nombre_endosante, id_pagare))
        return "Error: {} no es el acreedor actual del pagare {}".format(
            endoso.nombre_endosante, id_pagare), 401
    if pagare.ultimoEndoso != "null":
        ultimoEndoso = Endoso()
        ultimoEndoso.endosoFromDoc(
            db.endosos.find_one({"_id": ObjectId(pagare.ultimoEndoso)}))
        if ultimoEndoso.id_endosatario != endoso.id_endosante:
            print("Error: {} no es el acreedor actual del pagare {}".format(
                endoso.nombre_endosante, id_pagare))
            return "Error: {} no es el acreedor actual del pagare {}".format(
                endoso.nombre_endosante, id_pagare), 401
    # agregar codigo de retiro
    endoso.codigo_retiro = request.json['codigo_retiro']
    endoso.etapa = 2
    # actualizar endoso
    db.endosos.update_one({'_id': ObjectId(endoso._id)}, {
        '$set': {
            "codigo_retiro": endoso.codigo_retiro,
            "etapa": endoso.etapa,
        }
    })
    return vars(endoso)
示例#7
0
def get_ultimo_endoso(id_pagare):
    try:
        doc = db.pagares.find_one({"_id": ObjectId(id_pagare)})
    except:
        return "El id es invalido", 400
    if doc == None:
        return "Pagare no encontrado", 404
    pagare = Pagare()
    pagare.pagareFromDoc(doc)
    if pagare.ultimoEndoso == "null":
        return "El pagare {} no tiene endosos".format(pagare._id), 404
    doc = db.endosos.find_one({"_id": ObjectId(pagare.ultimoEndoso)})
    endoso = Endoso()
    endoso.endosoFromDoc(doc)
    return vars(endoso)
示例#8
0
def crear_endoso_etapa_3(id_pagare):
    try:
        doc = db.pagares.find_one({"_id": ObjectId(id_pagare)})
    except:
        return "El id es invalido", 400
    if doc == None:
        return "Pagare no encontrado", 404

    pagare = Pagare()
    pagare.pagareFromDoc(doc)
    anterior_endoso = pagare.ultimoEndoso
    endoso = Endoso()
    docEndoso = db.endosos.find_one({"id_pagare": id_pagare, "etapa": 2})
    if docEndoso == None:
        return "No existe un endoso pendiente (en etapa 2) para el pagare designado", 401
    endoso.endosoFromDoc(docEndoso)
    # Revisar que el endoso sea valido
    if not pagare.pendiente:
        return "Error: El pagare {} no está pendiente, puede ser que está vencido o algo".format(
            pagare._id)
    if pagare.ultimoEndoso == "null" and endoso.id_endosante != pagare.idAcreedor:
        return "Error: {} no es el acreedor actual del pagare {}".format(
            endoso.nombre_endosante, id_pagare), 401
    if pagare.ultimoEndoso != "null":
        ultimoEndoso = Endoso()
        ultimoEndoso.endosoFromDoc(
            db.endosos.find_one({"_id": ObjectId(pagare.ultimoEndoso)}))
        if ultimoEndoso.id_endosatario != endoso.id_endosante:
            return "Error: {} no es el acreedor actual del pagare {}".format(
                endoso.nombre_endosante, id_pagare), 401
    # Termina de llenar el endoso
    endoso.es_ultimo_endoso = True
    endoso.etapa = 3
    endoso.firma = request.json['firma']
    endoso.fecha = datetime.today()
    # Agregar Endoso a BC
    tx_hash = bca.endosar_pagare(endoso)
    endoso.hash_transaccion = tx_hash
    # Actualizar Pagare
    pagare.ultimoEndoso = endoso._id
    pagareUpdates = getUpdateStatement(pagare)
    db.pagares.update_one({'_id': ObjectId(id_pagare)},
                          {'$set': pagareUpdates})
    # actualizar endoso
    db.endosos.update_one({'_id': ObjectId(endoso._id)}, {
        '$set': {
            "firma": endoso.firma,
            "fecha": endoso.fecha,
            "etapa": 3,
            "es_ultimo_endoso": True,
            "hash_transaccion": tx_hash
        }
    })
    # Actualizar anterior endoso
    if anterior_endoso != "null":
        db.endosos.update_one({"_id": ObjectId(anterior_endoso)},
                              {"$set": {
                                  "es_ultimo_endoso": False
                              }})
    doc = db.endosos.find_one({'_id': ObjectId(endoso._id)})
    endosoR = Endoso()
    endosoR.endosoFromDoc(doc)
    return vars(endosoR)
示例#9
0
def endosar_etapa_1(id_pagare):
    try:
        doc = db.pagares.find_one({"_id": ObjectId(id_pagare)})
    except:
        return "El id es invalido", 400
    if doc == None:
        return "Pagare no encontrado", 404
    pagare = Pagare()
    pagare.pagareFromDoc(doc)
    # Revisar que no exista endoso pendiente
    doc = db.endosos.find_one({"id_pagare": id_pagare, "etapa": 1})
    doc2 = db.endosos.find_one({"id_pagare": id_pagare, "etapa": 2})
    if doc != None:
        return "Ya existe un endoso con id {} en proceso para el pagare {}".format(
            doc["_id"], id_pagare), 401
    if doc2 != None:
        return "Ya existe un endoso con id {} en proceso para el pagare {}".format(
            doc["_id"], id_pagare), 401

    # Revisar legitimo tenedor
    if not pagare.pendiente:
        return "Error: El pagare {} no está pendiente, puede ser que está vencido o algo".format(
            pagare._id)
    if pagare.ultimoEndoso == "null" and request.json[
            'id_endosante'] != pagare.idAcreedor:
        return "Error: {} no es el acreedor actual del pagare {}".format(
            request.json['nombre_endosante'], id_pagare), 401
    if pagare.ultimoEndoso != "null":
        ultimoEndoso = Endoso()
        ultimoEndoso.endosoFromDoc(
            db.endosos.find_one({"_id": ObjectId(pagare.ultimoEndoso)}))
        if ultimoEndoso.id_endosatario != request.json['id_endosante']:
            return "Error: {} no es el acreedor actual del pagare {}".format(
                request.json['nombre_endosante'], id_pagare), 401
    # Crear endoso
    endoso = Endoso()
    endoso.etapa = 1
    endoso.id_endosante = request.json['id_endosante']
    endoso.id_endosatario = request.json['id_endosatario']
    endoso.nombre_endosante = request.json['nombre_endosante']
    endoso.nombre_endosatario = request.json['nombre_endosatario']
    endoso.id_anterior_endoso = pagare.ultimoEndoso
    endoso.id_pagare = id_pagare

    # Send to DB
    inserted_id = db.endosos.insert_one(vars(endoso)).inserted_id

    # get the new endoso
    endoso._id = str(inserted_id)
    return vars(endoso)
示例#10
0
def crear_endoso(id_pagare):
    try:
        doc = db.pagares.find_one({"_id": ObjectId(id_pagare)})
    except:
        return "El id es invalido", 400
    if doc == None:
        return "Pagare no encontrado", 404

    pagare = Pagare()
    pagare.pagareFromDoc(doc)
    anterior_endoso = pagare.ultimoEndoso
    endoso = Endoso()
    endoso.endosoFromRequest(request, id_pagare, anterior_endoso)
    # Revisar que el endoso sea valido
    if not pagare.pendiente:
        return "Error: El pagare {} no está pendiente, puede ser que está vencido o algo".format(
            pagare._id)
    if pagare.ultimoEndoso == "null" and endoso.id_endosante != pagare.idAcreedor:
        return "Error: {} no es el acreedor actual del pagare {}".format(
            endoso.nombre_endosante, id_pagare), 401
    if pagare.ultimoEndoso != "null":
        ultimoEndoso = Endoso()
        ultimoEndoso.endosoFromDoc(
            db.endosos.find_one({"_id": ObjectId(pagare.ultimoEndoso)}))
        if ultimoEndoso.id_endosatario != endoso.id_endosante:
            return "Error: {} no es el acreedor actual del pagare {}".format(
                endoso.nombre_endosante, id_pagare), 401
    # Agregar endoso a db
    id_insertado = db.endosos.insert_one(vars(endoso)).inserted_id
    endoso._id = str(id_insertado)
    # Agregar Endoso a BC
    tx_hash = bca.endosar_pagare(endoso)
    endoso.hash_transaccion = tx_hash
    # Actualizar Pagare
    pagare.ultimoEndoso = endoso._id
    pagareUpdates = getUpdateStatement(pagare)
    db.pagares.update_one({'_id': ObjectId(id_pagare)},
                          {'$set': pagareUpdates})
    # actualizar endoso
    db.endosos.update_one({'_id': ObjectId(endoso._id)},
                          {'$set': {
                              'hash_transaccion': tx_hash,
                          }})
    doc = db.endosos.find_one({'_id': ObjectId(endoso._id)})
    endosoR = Endoso()
    endosoR.endosoFromDoc(doc)
    return vars(endosoR)