def put(self, id): try: # session.autocommit = False # session.autoflush = False json_data = request.get_json(force=True) entity = session.query(MODEL).filter(MODEL.id == id).first() if not entity: abort(404, message=ENTITY_NAME + " {} doesn't exist".format(id)) product_positions = session.query(ProductsPositions).filter( ProductsPositions.products_positions.any(entity.id)).all() if product_positions is not None: session.bulk_update_mappings(ProductsPositions, [{ 'id': x.id, 'products_positions': list(filter(lambda y: y != entity.id, x.products_positions)) } for x in product_positions]) session.commit() db_transformer.transform_update_params(entity, json_data) session.add(entity) session.commit() # api_url = settings.API_URL # if hasattr(entity, 'default_image_data'): # if (entity.default_image_data != None and entity.default_image_data.file_path != None): # entity.default_image_data.file_path = urllib.parse.urljoin(api_url, # entity.default_image_data.file_path) # if hasattr(entity, 'default_image_data'): # if (entity.default_image_data != None and entity.default_image_data.thumb_file_path != None): # entity.default_image_data.thumb_file_path = urllib.parse.urljoin(api_url, # entity.default_image_data.thumb_file_path) # if hasattr(entity, 'default_image_data'): # if (entity.default_image_data != None and entity.default_image_data.optimized_size_file_path != None): # entity.default_image_data.optimized_size_file_path = urllib.parse.urljoin(api_url, # entity.default_image_data.optimized_size_file_path) entity.images_data = [] if (entity.gallery_images != None and len(entity.gallery_images) > 0): for img_id in entity.gallery_images: image = session.query(Attachments).filter( Attachments.id == img_id).first() if not image: continue entity.images_data.append(image) return entity, 201 except Exception as e: session.rollback() abort(400, message="Error while update " + ENTITY_NAME) finally: pass
def put(self, id): try: # session.autocommit = False # session.autoflush = False json_data = request.get_json(force=True) entity = session.query(MODEL).filter(MODEL.id == id).first() if not entity: abort(404, message=ENTITY_NAME + " {} doesn't exist".format(id)) # check if this category has another parent_id, so we should delete it from positions if json_data['parent_category_id'] != entity.parent_category_id\ or json_data.get('is_delete', False)\ or json_data.get('is_lock', False): position = session.query(ProductCategoryPositions) \ .filter(ProductCategoryPositions.parent_category_id == entity.parent_category_id).first() if position is not None: position.child_category_positions = [e for e in position.child_category_positions if e != entity.id] session.add(position) session.commit() db_transformer.transform_update_params(entity, json_data) session.add(entity) session.commit() # session.close() # api_url = settings.API_URL # if hasattr(entity, 'default_image_data'): # if (entity.default_image_data != None and entity.default_image_data.file_path != None): # entity.default_image_data.file_path = urllib.parse.urljoin(api_url, # entity.default_image_data.file_path) # if hasattr(entity, 'default_image_data'): # if (entity.default_image_data != None and entity.default_image_data.thumb_file_path != None): # entity.default_image_data.thumb_file_path = urllib.parse.urljoin(api_url, # entity.default_image_data.thumb_file_path) # if hasattr(entity, 'default_image_data'): # if (entity.default_image_data != None and entity.default_image_data.optimized_size_file_path != None): # entity.default_image_data.optimized_size_file_path = urllib.parse.urljoin(api_url, # entity.default_image_data.optimized_size_file_path) # entity.images_data = [] if entity.images is not None and len(entity.images) > 0: for img_id in entity.images: image = session.query(Attachments).filter(Attachments.id == img_id).first() if not image: continue entity.images_data.append(image) return entity, 201 except Exception as e: session.rollback() abort(400, message="Error while update " + ENTITY_NAME) finally: pass
def put(self, id): try: json_data = request.get_json(force=True) entity = session.query(MODEL).filter(MODEL.id == id).first() if not entity: abort(404, message=ENTITY_NAME + " {} doesn't exist".format(id)) db_transformer.transform_update_params(entity,json_data) session.add(entity) session.commit() return entity, 201 except Exception as e: session.rollback() abort(400, message="Error while update "+ENTITY_NAME)
def put(self, id): try: # session.autocommit = False # session.autoflush = False json_data = request.get_json(force=True) entity = session.query(MODEL).filter(MODEL.id == id).first() if not entity: abort(404, message=ENTITY_NAME + " {} doesn't exist".format(id)) db_transformer.transform_update_params(entity, json_data) session.add(entity) session.commit() entity.images_data = [] if (entity.images != None and len(entity.images) > 0): for img_id in entity.images: image = session.query(Attachments).filter( Attachments.id == img_id).first() if not image: continue entity.images_data.append(image) entity.products_count = 0 products = session.query(Products).filter( Products.brand_id == entity.id, Products.not_show_in_catalog != True, Products.is_delete != True).all() if (not products): entity.products_count = 0 else: entity.products_count = len(products) return entity, 201 except Exception as e: session.rollback() abort(400, message="Error while update " + ENTITY_NAME) finally: pass
def post(self): try: action_type = 'POST' json_data = request.get_json(force=True) user_cart_id = json_data['id'] cart_positions = json_data['cart_positions'] # user_action_logging.log_user_actions(ROUTE, user_id, action_type) db_cart_positions = session.query(UserCartPositions).filter( UserCartPositions.user_cart_id == user_cart_id).order_by( desc(UserCartPositions.id)).all() remove_cart_position_indexes = [] #проверяем все ли элементы корзины из реальной БД есть в той, что пришла for db_cart_position in db_cart_positions: founded = False for cart_position in cart_positions: m_cart_position_id = cart_position['id'] if (m_cart_position_id == db_cart_position.id): founded = True break if (founded == False): remove_cart_position_indexes.append(db_cart_position.id) #удаляем все позиции которые были удалены на стороне клиента for remove_cart_position_index in remove_cart_position_indexes: entity = session.query(UserCartPositions).filter( UserCartPositions.id == remove_cart_position_index).first() if not entity: continue session.delete(entity) session.commit() total_bonuses = 0 for position in cart_positions: position_args = {} position_args['id'] = position['id'] position_args['count'] = position['count'] position_args['alt_count'] = position['alt_count'] position_args['description'] = position['description'] position_args['need_invoice'] = position['need_invoice'] db_position = session.query(UserCartPositions).filter( UserCartPositions.id == position_args['id']).first() if (not db_position): continue db_transformer.transform_update_params(db_position, position_args) session.add(db_position) session.commit() user_cart = session.query(UserCarts).filter( UserCarts.id == user_cart_id).first() if not user_cart: abort(400, message='Ошибка получения данных. Данные не найдены') user_cart_positions = session.query(UserCartPositions).filter( UserCartPositions.user_cart_id == user_cart.id).all() # for cart_position in cart_positions: # cart_position user_cart.cart_positions = user_cart_positions total_sum = 0 total_sum_without_discount = 0 amount_sum = 0 currency_id = -1 for cart_position in user_cart_positions: count = cart_position.count alt_count = cart_position.alt_count cart_position.bonus = 0 product = session.query(Products).filter( Products.id == cart_position.product_id).first() if (currency_id == -1): currency_id = product.currency_id if (not product): continue if (product.alt_discount_amount == None): product.alt_discount_amount = 0 if (product.alt_amount == None): product.alt_amount = 0 cart_position.bonuses = 0 if (cart_position.count != 0): bonus = product.amount * (product.bonus_percent / 100) * cart_position.count bonus += product.alt_amount * ( product.bonus_percent / 100) * cart_position.alt_count bonus = round(bonus, 2) if (bonus != None): cart_position.bonuses = bonus total_bonuses += bonus single_amount = 0 if (product.is_discount_product == True): discount_amount = product.discount_amount alt_discount_amount = product.alt_discount_amount if (discount_amount == 0): discount_amount = product.amount if (alt_discount_amount == None or alt_discount_amount == 0): alt_discount_amount = product.alt_amount if (discount_amount == 0): discount_amount = product.amount single_amount = round(discount_amount * count, 2) alt_single_amount = round(alt_discount_amount * alt_count, 2) total_sum += single_amount total_sum += alt_single_amount total_sum_without_discount += round( product.amount * count, 2) total_sum_without_discount += round( product.alt_amount * alt_count, 2) delta = product.amount - discount_amount alt_delta = product.alt_amount - alt_discount_amount amount_sum += round(delta * count, 2) amount_sum += round(alt_delta * alt_count, 2) else: total_sum += round(product.amount * count, 2) total_sum += round(product.alt_amount * alt_count, 2) total_sum_without_discount += round( product.amount * count, 2) total_sum_without_discount += round( product.alt_amount * alt_count, 2) economy_delta = total_sum_without_discount - amount_sum economy_percent = round( 100 * (economy_delta / total_sum_without_discount), 2) user_cart.total_amount = total_sum user_cart.total_amount_without_discount = total_sum_without_discount user_cart.discount_amount = amount_sum user_cart.economy_delta = economy_delta user_cart.economy_percent = economy_percent user_cart.products_count = len(user_cart_positions) user_cart.currency_data = session.query(CurrencyCatalog).filter( CurrencyCatalog.id == currency_id).first() user_cart.bonuses_amount = round(total_bonuses, 2) return user_cart except Exception as e: if (hasattr(e, 'data')): if (e.data != None and "message" in e.data): abort(400, message=e.data["message"]) abort(400, message="Неопознанная ошибка")
def post(self): try: action_type = 'POST' json_data = request.get_json(force=True) user_cart_id = json_data['user_cart_id'] address_id = json_data['client_address_id'] description = json_data['description'] if (description == ''): description = '-' user_cart = session.query(UserCarts).filter( UserCarts.id == user_cart_id).first() if (not user_cart): abort(400, message="Корзина не найдена") user_cart_positions = session.query(UserCartPositions).filter( UserCartPositions.user_cart_id == user_cart.id).all() total_sum = 0 total_sum_without_discount = 0 amount_sum = 0 currency_id = -1 bonuses_amount = 0 for cart_position in user_cart_positions: count = cart_position.count alt_count = cart_position.alt_count product = session.query(Products).filter( Products.id == cart_position.product_id).first() if (currency_id == -1): currency_id = product.currency_id if (not product): continue if (product.alt_discount_amount == None): product.alt_discount_amount = 0 if (product.alt_amount == None): product.alt_amount = 0 if (product.bonus_percent != None and product.bonus_percent != 0): bonus_value = round( product.amount * (product.bonus_percent / 100), 2) bonuses_amount += bonus_value bonus_amount += product.alt_amount * ( product.bonus_percent / 100) * cart_position.alt_count bonus_amount = round(bonus_amount, 2) single_amount = 0 if (product.is_discount_product == True): discount_amount = product.discount_amount alt_discount_amount = product.alt_discount_amount if (discount_amount == 0): discount_amount = product.amount if (alt_discount_amount == None or alt_discount_amount == 0): alt_discount_amount = product.alt_amount single_amount = round(discount_amount * count, 2) alt_single_amount = round(alt_discount_amount * alt_count, 2) total_sum += single_amount total_sum += alt_single_amount total_sum_without_discount += round( product.amount * count, 2) total_sum_without_discount += round( product.alt_amount * alt_count, 2) delta = product.amount - discount_amount alt_delta = product.alt_amount - alt_discount_amount amount_sum += round(delta * count, 2) amount_sum += round(alt_delta * alt_count, 2) else: total_sum += round(product.amount * count, 2) total_sum += round(product.alt_amount * alt_count, 2) total_sum_without_discount += round( product.amount * count, 2) total_sum_without_discount += round( product.alt_amount * alt_count, 2) economy_delta = total_sum_without_discount - amount_sum economy_percent = round( 100 * (economy_delta / total_sum_without_discount), 2) order_args = {} order_args["user_id"] = user_cart.user_id order_args["amount"] = total_sum_without_discount order_args["amount_discount"] = amount_sum order_args["total_amount"] = total_sum order_args["client_address_id"] = address_id order_args["currency_id"] = currency_id order_args["description"] = description order_entity = Orders(order_args) session.add(order_entity) session.commit() start_position = 100000000000 order_number = start_position + order_entity.id order_args = {} current_order = session.query(Orders).filter( Orders.id == order_entity.id).first() order_args["number"] = str(order_number) db_transformer.transform_update_params(current_order, order_args) session.add(current_order) session.commit() for cart_position in user_cart_positions: order_position_args = {} order_position_args["order_id"] = order_entity.id order_position_args["product_id"] = cart_position.product_id order_position_args["count"] = cart_position.count order_position_args["alt_count"] = cart_position.alt_count order_position_args["description"] = '-' order_position_args["order_position_state_id"] = 1 order_position_args[ "need_invoice"] = cart_position.need_invoice product = session.query(Products).filter( Products.id == cart_position.product_id).first() order_position_args["amount_per_item"] = product.amount order_position_args[ "amount_per_item_discount"] = product.discount_amount order_position_args["alt_amount_per_item"] = product.alt_amount order_position_args[ "alt_amount_per_item_discount"] = product.alt_discount_amount total_amount = 0 if (product.is_discount_product == True): total_amount = round( product.discount_amount * cart_position.count, 2) total_amount += round( product.alt_discount_amount * cart_position.alt_count, 2) else: total_amount = round(product.amount * cart_position.count, 2) total_amount += round( product.alt_amount * cart_position.alt_count, 2) total_sum_without_discount += round( product.amount * cart_position.count, 2) total_sum_without_discount += round( product.alt_amount * cart_position.alt_count, 2) order_position_args["total_amount"] = total_amount order_positions_entity = OrderPositions(order_position_args) session.add(order_positions_entity) session.commit() user_cart.cart_state_id = 3 session.add(user_cart) session.commit() bonuses_args = {} bonuses_args["user_id"] = user_cart.user_id bonuses_args["order_id"] = order_entity.id bonuses_args["amount"] = bonuses_amount bonuses_entity = UserBonuses(bonuses_args) session.add(bonuses_entity) session.commit() response = {'status_code': 200} return response except Exception as e: session.rollback() if (hasattr(e, 'data')): if (e.data != None and "message" in e.data): abort(400, message=e.data["message"]) abort(400, message="Неопознанная ошибка")