示例#1
0
    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
示例#3
0
 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)
示例#4
0
    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="Неопознанная ошибка")
示例#6
0
    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="Неопознанная ошибка")