Beispiel #1
0
def reserveStock(articleId, quantity):
    """
    Genera una reserva de stock para un articulo.
    Esto significa que se va a descontar del stock la cantidad indicada en el articulo.
    articleId: string ObjectId del articulo
    quantity: int Cantidad a descontar
    """
    if (not isinstance(quantity, numbers.Integral) or quantity <= 0):
        raise errors.InvalidArgument("quantity", "Invalid quantity")

    result = db.articles.find_one_and_update(
        {
            "$and": [{
                '_id': bson.ObjectId(articleId)
            }, {
                'enabled': True
            }, {
                'stock': {
                    "$gte": quantity
                }
            }]
        }, {'$inc': {
            'stock': -int(quantity)
        }},
        return_document=pymongo.ReturnDocument.AFTER)

    if (not result):
        raise errors.InvalidArgument("quantity", "Invalid quantity")

    return result
Beispiel #2
0
def getDiscountByDate(articleId, discountDate):

    try:
        print("llego ", discountDate)
        discountDate = datetime.strptime(discountDate, '%d/%m/%y')

        result = db.discounts.find({"article_id": articleId})
        resultPrice = {}
        for price in result:
            strDate = price['fechaDesde']
            objDate = datetime.strptime(strDate, '%Y-%m-%dT%H:%M:%S')
            if (objDate.year == discountDate.year
                    and objDate.month == discountDate.month
                    and objDate.day == discountDate.day):
                # print("encontró", price)
                resultPrice = price
                # return price
        if (resultPrice):
            return resultPrice
        else:
            return {}

        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return ultimoPrecio
    except Exception:
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #3
0
def getArticle(articleId):
    """
    Obtiene un articulo. \n
    articleId: string ObjectId\n
    return dict<propiedad, valor> Articulo\n
    """
    """
    @api {get} /v1/articles/:articleId Buscar Artículo
    @apiName Buscar Artículo
    @apiGroup Articulos

    @apiSuccessExample {json} Respuesta
        HTTP/1.1 200 OK
        {
            "_id": "{id de articulo}"
            "name": "{nombre del articulo}",
            "description": "{descripción del articulo}",
            "image": "{id de imagen}",
            "price": {precio actual},
            "stock": {stock actual}
            "updated": {fecha ultima actualización}
            "created": {fecha creación}
            "enabled": {activo}
        }

    @apiUse Errors

    """
    try:
        result = db.articles.find_one({"_id": bson.ObjectId(articleId)})
        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return result
    except Exception:
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #4
0
def getPrice(articleId):

    try:
        # print('TCL: articleId', articleId)
        # print("va a buscar")
        # TODO: verificar también la vigencia de los precios y ver la suma
        result = db.prices.find({"article_id": articleId})
        ultimoPrecioSuma = 0
        ultimoPrecio = {}
        # print("result", result)
        for price in result:
            # print("price", price)
            strDate = price['fechaDesde']
            print('TCL: strDate', strDate)
            objDate = datetime.strptime(strDate, '%Y-%m-%dT%H:%M:%S')
            # print('TCL: objDate', objDate)
            # print("el día de creación es: ",objDate.day)
            sumaPrecio = objDate.day + objDate.month + \
                objDate.year + objDate.hour + objDate.minute
            # print("sumatoria de la fecha ",sumaPrecio)
            if(sumaPrecio > ultimoPrecioSuma):
                ultimoPrecioSuma = sumaPrecio
                # print("el mayor es ",sumaPrecio)
                ultimoPrecio = price
        print("el precio mayor es: ", ultimoPrecioSuma)
        print("resulto mayor: ", ultimoPrecio)


        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return ultimoPrecio
    except Exception:
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #5
0
def increaseStock(articleId, quantity):
    """
    Registra una compra de stock para un articulo.
    Esto significa que se va a incrementar el stock del articulo en la cantidad indicada.
    articleId: string ObjectId del articulo
    quantity: int Cantidad a incrementar
    """

    if (not isinstance(quantity, numbers.Integral) or quantity <= 0):
        raise errors.InvalidArgument("quantity", "Invalid quantity")

    result = db.stock.find_one_and_update(
        {
            "$and": [
                {
                    '_id': bson.ObjectId(articleId)
                    #'nombreProducto': bson.ObjectId(nombreProducto)
                    #'idProducto': bson.ObjectId(idProducto)
                },
                {
                    'enabled': True
                }
            ]
        },
        {'$inc': {
            'stock': quantity
        }},
        return_document=pymongo.ReturnDocument.AFTER)

    if (not result):
        raise errors.InvalidArgument("quantity", "Invalid quantity")

    return result
Beispiel #6
0
def getDiscountByDate(articleId, discountDate):
    """
    Busca descuentos por fecha.\n
    discountDate string fecha a buscar
    """
    """
    @api {get} //v1/discount/article_id/search/:fecha Buscar Precio por fecha
    @apiName Buscar Descuento por fecha
    @apiGroup Descuentos
    @apiDescription Busca Descuentos por fecha de vigencia

    @apiSuccessExample {json} Respuesta
        HTTP/1.1 200 OK
        [
            {
            "_id": "{id del precio}"
            "fechaDesde": {fecha de vigencia},
            "discount_code": {codigo de descuento},
            "discount_percentage": {porcentaje de descuento},
            "discount_amount": {monto de descuento}
            "updated": {fecha ultima actualización}
            "created": {fecha creación}
            "enabled": {activo}
            },
            ...
        ]

    @apiUse Errors
    """

    try:
        print("llego ",discountDate)
        discountDate = datetime.strptime(discountDate, '%d/%m/%y')

        result = db.discounts.find({"article_id": articleId})
        
        resultDiscount = {}
        for discount in result: 
            strDate = discount['fechaDesde']
            objDate = datetime.strptime(strDate, '%Y-%m-%dT%H:%M:%S')
            if(objDate.year == discountDate.year and objDate.month == discountDate.month and objDate.day == discountDate.day):
                
                resultDiscount = discount
                
        if(resultDiscount):
            return resultDiscount
        else:
            return {}

        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return result
    except Exception: 
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #7
0
def getDiscountByArticle(articleId):
    try:
        result = db.discounts.find({"article_id": articleId})
        discounts = []
        for discount in result:
            discounts.append(discount)
        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return discounts
    except Exception:
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #8
0
def getDiscount(discountCode):

    try:
        print("va a buscar", discountCode)
        result = db.discounts.find_one({"discount_code": discountCode})
        print("result", result)

        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return result
    except Exception:
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #9
0
def validateAddPriceParams(params):
    """
    Valida los parametros para crear un objeto.\n
    params: dict<propiedad, valor> Price
    """
    if ("_id" in params):
        raise error.InvalidArgument("_id", "Inválido")

    return schemaValidator.validateAndClean(DISCOUNT_UPDATE_SCHEMA, params)
Beispiel #10
0
def validateEditArticleParams(articleId, params):
    """
    Valida los parametros para actualizar un objeto.\n
    params: dict<propiedad, valor> Article
    """
    if (not articleId):
        raise error.InvalidArgument("_id", "Inválido")

    return schemaValidator.validateAndClean(ARTICLE_UPDATE_SCHEMA, params)
Beispiel #11
0
def validateAddStockParams(params):
    """
    Valida los parametros para crear un objeto.\n
    params: dict<propiedad, valor> Article
    """
    if ("_id" in params):
        raise error.InvalidArgument("_id", "Inválido")

    return schemaValidator.validateAndClean(STOCK_UPDATE_SCHEMA, params)
Beispiel #12
0
def getDiscountByArticle(articleId):
    """
    Obtiene el descuento de un articulo. \n
    articleId: string ObjectId\n
    return dict<propiedad, valor> Descuento\n
    """
    """
    @api {get} /v1/discount/search/:article_id Buscar Descuento por articulo
    @apiName Buscar Descuento por articulo
    @apiGroup Descuentos

    @apiSuccessExample {json} Respuesta
        HTTP/1.1 200 OK
        {
            "_id": "{id del precio}"
            "fechaDesde": {fecha de vigencia},
            "discount_code": {codigo de descuento},
            "discount_percentage": {porcentaje de descuento},
            "discount_amount": {monto de descuento}
            "updated": {fecha ultima actualización}
            "created": {fecha creación}
            "enabled": {activo}
        }

    @apiUse Errors

    """
    try:
        result = db.discounts.find({"article_id": articleId}).sort(
            "fechaDesde", -1).limit(1)
        
        ultimoDescuento= result[0]
           
        print("resulto mayor: ", ultimoDescuento)
      
        if( not result ):
            raise error.InvalidArgument("_id", "Document does not exists")
       
        return ultimoDescuento
    except Exception:
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #13
0
def getDiscount(discountCode):
    """
    Obtiene el descuento de un articulo a traves del código de descuento. \n
    discountCode: string ObjectId\n
    return dict<propiedad, valor> Descuento\n
    """
    """
    @api {get} /v1/discount/search/:discount_code Buscar Descuento por codigo
    @apiName Buscar Descuento por codigo
    @apiGroup Descuentos

    @apiSuccessExample {json} Respuesta
        HTTP/1.1 200 OK
        {
            "_id": "{id del precio}"
            "fechaDesde": {fecha de vigencia},
            "discount_code": {codigo de descuento},
            "discount_percentage": {porcentaje de descuento},
            "discount_amount": {monto de descuento}
            "updated": {fecha ultima actualización}
            "created": {fecha creación}
            "enabled": {activo}
        }

    @apiUse Errors

    """
    
    try:
        print("va a buscar", discountCode)
        result = db.discounts.find_one({"discount_code": discountCode})
        print("result", result)

        if (not result):
            raise error.InvalidArgument("_id", "Document does not exists")
        return result
    except Exception: 
        raise error.InvalidArgument("_id", "Invalid object id")
Beispiel #14
0
def validatePriceExist(articleId):
    article = crud.getPrice(articleId)
    if ("enabled" not in article or not article["enabled"]):
        raise error.InvalidArgument("_id", "Inválido")
Beispiel #15
0
def validateEditDiscountParams(discountCode, params):
    if (not discountCode):
        raise error.InvalidArgument("_id", "Inválido")

    return schemaValidator.validateAndClean(DISCOUNT_UPDATE_SCHEMA, params)
Beispiel #16
0
def validateStockExist(articleId):
    stock = crud.getStock(articleId)
    if("enabled" not in stock or not stock["enabled"]):
        raise error.InvalidArgument("_id", "Inválido")