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
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")
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")
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")
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
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")
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")
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")
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)
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)
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)
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")
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")
def validatePriceExist(articleId): article = crud.getPrice(articleId) if ("enabled" not in article or not article["enabled"]): raise error.InvalidArgument("_id", "Inválido")
def validateEditDiscountParams(discountCode, params): if (not discountCode): raise error.InvalidArgument("_id", "Inválido") return schemaValidator.validateAndClean(DISCOUNT_UPDATE_SCHEMA, params)
def validateStockExist(articleId): stock = crud.getStock(articleId) if("enabled" not in stock or not stock["enabled"]): raise error.InvalidArgument("_id", "Inválido")