Example #1
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('category_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            category_id = args['category_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            product_position = session.query(ProductsPositions).filter(
                ProductsPositions.category_id == category_id).first()
            if not product_position:
                product_position = {
                    'id': None,
                    'category_id': category_id,
                    'products_positions': []
                }

            return product_position
        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="Неопознанная ошибка")
Example #2
0
    def get(self):
        try:

            action_type='GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('request_user_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            request_user_id = args['request_user_id']
            user_action_logging.log_user_actions(ROUTE,user_id, action_type)
            user = session.query(Users).filter(Users.id==request_user_id).first()
            if not user:
                abort(400, message='Ошибка получения данных. Данные не найдены')

            user.user_login = session.query(UserLogins).filter(UserLogins.user_id==user.id).first()
            user.user_info_data = session.query(UserInfo).filter(UserInfo.user_id == user.id).first()
            return user

        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 = "Неопознанная ошибка")
Example #3
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('attachments_ids')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            attachments_ids = args['attachments_ids']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            attachments_ids = [int(s) for s in attachments_ids.split(',')]
            attachments = session.query(Attachments).filter(
                Attachments.id.in_(attachments_ids)).all()
            if not attachments:
                return []
                # abort(400, message='Ошибка получения данных. Данные не найдены')

            # result = copy.deepcopy(attachments)
            return attachments
        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="Неопознанная ошибка")
        finally:
            pass
Example #4
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('client_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            client_id = args['client_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            client_info = session.query(ClientInfo).filter(
                ClientInfo.client_id == client_id).first()
            if not client_info:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')
            #image_path_converter.convert_path(client_info.attachment_data)

            return client_info
        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="Неопознанная ошибка")
Example #5
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            # check login
            settings = session.query(Settings).order_by(
                Settings.id.desc()).all()

            if not settings:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            return settings
        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="Неопознанная ошибка")
Example #6
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('product_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            product_id = args['product_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            # check login
            comments = session.query(ProductComments).filter(
                ProductComments.product_id == product_id).all()

            if not comments:
                return []
                #abort(400, message='Ошибка получения данных. Данные не найдены')

            return comments
        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 get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            product_categories = session.query(ProductCategories).filter(
                ProductCategories.is_delete == False).all()
            if not product_categories:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            categories_without_products = []

            for product_category in product_categories:
                product = session.query(Products).filter(
                    Products.category_id == product_category.id).first()

                if (product == None):
                    categories_without_products.append(product_category)

            return categories_without_products
        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="Неопознанная ошибка")
Example #8
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('product_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            product_id = args['product_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            # check login
            product = session.query(Products).filter(
                Products.id == product_id).first()

            if not product:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            entity = product
            if not entity:
                abort(404,
                      message=ENTITY_NAME + " {} doesn't exist".format(id))
            #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
        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="Неопознанная ошибка")
        finally:
            pass
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('product_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            product_id = args['product_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            product = session.query(Products).filter(
                Products.id == product_id).first()
            t = 0

            products = session.query(Products).filter(
                Products.id != product_id, Products.is_delete == False).all()

            if not products:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            if (not product):
                return products

            recommendations = product.product_recomendations

            if (not recommendations):
                # если у продукта нет рекомендаций то выводим весь список товаров
                rec_products = session.query(Products).filter(
                    Products.id != product_id,
                    Products.is_delete == False).all()
                for r_product in rec_products:
                    r_product.is_recommend = False

                return rec_products

            if (len(recommendations) > 0):
                for pr in products:
                    p_id = pr.id
                    if ((p_id in recommendations) == True):
                        pr.is_recommend = True
                    else:
                        pr.is_recommend = False

            return products
        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="Неопознанная ошибка")
Example #10
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')

            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            orders = []
            # check login

            orders = session.query(Orders).filter(
                Orders.user_id == user_id).order_by(desc(Orders.id)).all()
            if not orders:
                return []

            for entity in orders:
                entity.display_creation_date = entity.creation_date.strftime(
                    "%Y-%m-%d %H:%M")
                if (entity.processed_date != None):
                    entity.display_processed_date = entity.processed_date.strftime(
                        "%Y-%m-%d %H:%M")

                if (entity.execute_date != None):
                    entity.display_execute_date = entity.execute_date.strftime(
                        "%Y-%m-%d %H:%M")

                entity.order_user_data = session.query(Users).filter(
                    Users.id == entity.user_id).first()
                if (entity.executor_id != None):
                    entity.order_executor_data = session.query(Users).filter(
                        Users.id == entity.executor_id).first()

                entity.bonuses = 0

                bonus = session.query(UserBonuses).filter(
                    UserBonuses.order_id == entity.id).first()
                if (bonus != None):
                    entity.bonuses = bonus.amount

            return orders
        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="Неопознанная ошибка")
Example #11
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('code')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            code = args['code']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            #products = session.query(Products).filter(Products.category_id==category_id).order_by(desc(Products.id)).all()

            user_confirmation_code = session.query(
                UserConfirmationCodes).filter(
                    UserConfirmationCodes.user_id == user_id).order_by(
                        desc(UserConfirmationCodes.id)).first()
            if (not user_confirmation_code):
                abort(400, message='Error')

            if (user_confirmation_code.code != str(code)):
                abort(400, message='Error')

            user = session.query(Users).filter(Users.id == user_id).first()

            if (not user):
                abort(400, message='Error')

            user.lock_state = False
            session.add(user)
            session.commit()
            response = {'status_code': 200}

            # response = object()
            #
            #
            # response.status_code = type('', (), {})
            # setattr(response,'status_code',200)
            #

            # response.status_code =200
            # setattr(response,'status_code',200)
            return response
        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 get(self):
     try:
         action_type = 'GET'
         parser = reqparse.RequestParser()
         parser.add_argument('user_id')
         args = parser.parse_args()
         if (len(args) == 0):
             abort(400, message='Arguments not found')
         user_id = args['user_id']
         user_action_logging.log_user_actions(ROUTE, user_id, action_type)
         view_settings = session.query(ViewSettings).first()
         return view_settings
     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 get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            # check login
            owner_users = session.query(Users).filter(
                Users.client_id == settings.OWNER_CLIENT_ID).order_by(
                    Users.id.desc()).all()
            for user in owner_users:
                u_id = user.id
                login = session.query(UserLogins).filter(
                    UserLogins.user_id == u_id).first()
                if not login:
                    continue

                user.user_login = login

            for user in owner_users:
                u_id = user.id

                user_info = session.query(UserInfo).filter(
                    UserInfo.user_id == user.id).first()

                if not user_info:
                    continue

                user.user_info_data = user_info

            if not owner_users:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            return owner_users
        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="Неопознанная ошибка")
Example #14
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')

            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            # product = session.query(Products).filter(Products.id==product_id).first()
            t = 0

            products = session.query(Products).filter(
                Products.is_delete == False).all()

            if not products:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            settings = session.query(ViewSettings).first()

            if (not settings):
                return Products

            recommendations = settings.recomendation_elements

            if (len(recommendations) > 0):
                for pr in products:
                    p_id = pr.id
                    if ((p_id in recommendations) == True):
                        pr.is_recommend = True
                    else:
                        pr.is_recommend = False

            return products
        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="Неопознанная ошибка")
Example #15
0
 def get(self):
     try:
         action_type = 'GET'
         parser = reqparse.RequestParser()
         parser.add_argument('user_id')
         parser.add_argument('message_content_id')
         args = parser.parse_args()
         if len(args) == 0:
             abort(400, message='Arguments not found')
         user_id = args['user_id']
         message_content_id = args['message_content_id']
         user_action_logging.log_user_actions(ROUTE, user_id, action_type)
         messages = session.query(Messages).filter(
             Messages.message_content_id == message_content_id).all()
         return messages
     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 get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('category_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            category_id = int(args['category_id'])
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            product_categories = session.query(ProductCategories).filter(
                ProductCategories.parent_category_id == category_id,
                ProductCategories.is_delete == False).all()

            product_category_position = session.query(ProductCategoryPositions) \
                .filter(ProductCategoryPositions.parent_category_id == category_id).first()
            if product_category_position is not None and len(
                    product_category_position.child_category_positions) > 0:
                positioned_categories = [
                    x
                    for x in product_category_position.child_category_positions
                ]
                other_categories = []
                for cat in product_categories:
                    if cat.id in product_category_position.child_category_positions:
                        positioned_categories[positioned_categories.index(
                            cat.id)] = cat
                    else:
                        other_categories.append(cat)
                product_categories = positioned_categories + other_categories

            return product_categories
        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 get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('state_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            state_id = int(args['state_id'])
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            orders = []
            # check login

            if (state_id == 1 or state_id == 3 or state_id == 4):
                orders = session.query(Orders).filter(
                    Orders.order_state_id == state_id).all()
                t = 0
                pass
            elif (state_id == 2):
                orders = session.query(Orders).filter(
                    and_(Orders.order_state_id == 2,
                         Orders.executor_id == user_id)).all()

            for entity in orders:
                entity.order_user_data = session.query(Users).filter(
                    Users.id == entity.user_id).first()
                if (entity.executor_id != None):
                    entity.order_executor_data = session.query(Users).filter(
                        Users.id == entity.executor_id).first()

            if not orders:
                return []

            return orders
        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="Неопознанная ошибка")
Example #18
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('product_id')
            parser.add_argument('user_cart_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            product_id = args['product_id']
            user_cart_id = args['user_cart_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            products = session.query(UserCartPositions).filter(
                and_(UserCartPositions.product_id == product_id,
                     UserCartPositions.user_cart_id == user_cart_id)).first()

            if (not products):
                response = {
                    'product_count': 1,
                    'alt_product_count': 0,
                    'unit_name': 'НЕТ',
                    'alt_unit_name': 'НЕТ'
                }
                return response

            alt_product_count = int(products.alt_count)

            response = {
                'product_count': int(products.count),
                'alt_product_count': alt_product_count
            }

            return response
        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="Неопознанная ошибка")
Example #19
0
 def get(self):
     try:
         action_type = 'GET'
         parser = reqparse.RequestParser()
         parser.add_argument('user_id')
         args = parser.parse_args()
         if len(args) == 0:
             abort(400, message='Arguments not found')
         user_id = args['user_id']
         user_action_logging.log_user_actions(ROUTE, user_id, action_type)
         events = session.query(Events).filter(Events.state == True).all()
         counter = 0
         for x in events:
             if (x.end_date.replace(tzinfo=None) -
                     datetime.utcnow()).days <= x.count_days_notifications:
                 counter += 1
         return counter
     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 get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('order_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            order_id = int(args['order_id'])
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            orderPositions = session.query(OrderPositions).filter(OrderPositions.order_id == order_id).order_by(
                desc(OrderPositions.id)).all()

            if not orderPositions:
                return []

            return orderPositions
        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="Неопознанная ошибка")
Example #21
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('product_id')
            parser.add_argument('value')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            product_id = int(args['product_id'])
            value = (args['value'])
            if (value == 'False' or value == 'false'):
                value = False
            else:
                value = True
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            favorite_products = session.query(UserFavoriteProducts).filter(
                UserFavoriteProducts.user_id == user_id).first()

            response = {'status_code': 200}

            if (not favorite_products):
                favorite_products_args = {}
                favorite_products_args["user_id"] = user_id
                favorite_products_args["products_ids"] = [product_id]
                favorite_products_entity = UserFavoriteProducts(
                    favorite_products_args)
                session.add(favorite_products_entity)
                session.commit()
                return favorite_products

            favorite_products_ids = favorite_products.products_ids
            if (value == True):
                if ((product_id in favorite_products_ids) == False):
                    favorite_products_ids.append(product_id)
            else:
                arr = []
                for p_id in favorite_products_ids:
                    if (p_id != product_id):
                        arr.append(p_id)

                favorite_products_ids = arr

            # f_args ={}
            # f_args["products_ids"] = [favorite_products_ids]

            # favorite_products = session.query(UserFavoriteProducts).filter(UserFavoriteProducts.user_id==user_id).first()

            # db_transformer.transform_update_params(favorite_products, f_args)
            # favorite_products.products_ids=[]
            # session.add(favorite_products)
            # session.commit()

            output = map(int, favorite_products_ids)
            favorite_products.products_ids = output

            # setattr(favorite_products,'products_ids',favorite_products_ids)
            session.add(favorite_products)
            session.commit()

            return favorite_products
        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="Неопознанная ошибка")
Example #22
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('filter_parameter')
            parser.add_argument('filter_value')
            parser.add_argument('user_cart_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            filter_parameter = args['filter_parameter']
            filter_value = args['filter_value']
            user_cart_id = self.get_user_cart_argument(args)
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            products = []
            # filter paramenters 1 - brands, 2 -partners, 3 - favorites, 4 - recommends , 5 - filter by name, 6 - discount, 7 -stock
            # session.query(Products).filter(Products.category_id==category_id).order_by(desc(Products.id)).all()
            # products = products.

            if (str(filter_parameter) == '1'):
                products = self.filter_by_brand(filter_value)
            elif (str(filter_parameter) == '2'):
                products = self.filter_by_partner(filter_value)
            elif (str(filter_parameter) == '3'):
                products = self.filter_by_favorites(user_id)
            elif (str(filter_parameter) == '4'):
                products = self.filter_by_recommendations()
            elif (str(filter_parameter) == '5'):
                products = self.filter_by_name(filter_value)
            elif (str(filter_parameter) == '6'):
                products = self.filter_by_discount()
            elif (str(filter_parameter) == '7'):
                products = self.filter_by_stock()
            elif (str(filter_parameter) == '8'):
                products = self.filter_by_all_partners()
            elif (str(filter_parameter) == '9'):
                products = self.filter_by_popular()
            elif (str(filter_parameter) == '10'):
                products = self.filter_by_product_name_or_partner_name(
                    filter_value)

            products = [x for x in products if x.is_delete == False]

            if not products:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')
            for product in products:
                if (user_cart_id == -1):
                    product.count = 1
                else:
                    user_cart = session.query(UserCarts).filter(
                        UserCarts.id == user_cart_id).first()
                    check_user_cart_positions = session.query(
                        UserCartPositions).filter(
                            and_(
                                UserCartPositions.user_cart_id == user_cart.id,
                                UserCartPositions.product_id ==
                                product.id)).first()

                    if (not check_user_cart_positions):
                        product.count = 1
                    else:
                        product.count = check_user_cart_positions.count
                    pass

                # comments = session.query(ProductComments).filter(
                #     ProductComments.product_id == product.id and ProductComments.is_delete == False).all()
                # product.comments_count = 0
                # product.rate = 0
                # if (not comments):
                #     continue
                # total_rate = 0
                # comments_count = 0
                # for comment in comments:
                #     total_rate += comment.rate
                #     comments_count += 1
                #
                # if (comments_count > 0):
                #     product.comments_count = comments_count
                #     product.rate = round((total_rate / comments_count), 2)

            # products.internal_products_count = len(products)

            return products
        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="Неопознанная ошибка")
        finally:
            pass
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            user_favorite_products = session.query(
                UserFavoriteProducts).filter(
                    UserFavoriteProducts.user_id == user_id).first()

            if (not user_favorite_products):
                abort(400, message="Not found favorite products")

            if (not user_favorite_products.product_ids):
                abort(400, message="Not found favorite products")

            products = []

            for favorite_product_id in user_favorite_products.products_ids:
                product = session.query(Products).filter(
                    Products.id == favorite_product_id).filter()

                if (not product):
                    continue

                products.append(product)
            if not products:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')
            # for product in products:
            #     comments = session.query(ProductComments).filter(ProductComments.product_id==product.id and ProductComments.is_delete==False).all()
            #     product.comments_count = 0
            #     product.rate = 0
            #     if (not comments):
            #
            #         continue
            #     total_rate =0
            #     comments_count=0
            #     for comment in comments:
            #         total_rate+=comment.rate
            #         comments_count+=1
            #
            #     if (comments_count>0):
            #         product.comments_count =comments_count
            #         product.rate =round((total_rate/comments_count),2)

            #products.internal_products_count = len(products)

            return products
        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="Неопознанная ошибка")
        finally:
            pass
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('user_cart_id')
            parser.add_argument('product_id')
            parser.add_argument('count')
            parser.add_argument('alt_count')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = int(args['user_id'])
            user_cart_id = int(args['user_cart_id'])
            product_id = int(args['product_id'])
            count = float(args['count'])
            alt_count = float(args['alt_count'])
            if (alt_count == -1):
                alt_count = 0

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            user_cart = {}
            if (user_cart_id == -1):
                user_cart_args = {}
                user_cart_args["user_id"] = user_id
                user_cart_entity = UserCarts(user_cart_args)
                session.add(user_cart_entity)
                session.commit()
                user_cart = user_cart_entity
            else:
                user_cart = session.query(UserCarts).filter(
                    UserCarts.id == user_cart_id).first()

                if (not user_cart):
                    user_cart_args = {}
                    user_cart_args["user_id"] = user_id
                    user_cart_entity = UserCarts(user_cart_args)
                    session.add(user_cart_entity)
                    session.commit()
                    user_cart = user_cart_entity

            #check if cart positions contains current product

            check_user_cart_positions = session.query(
                UserCartPositions).filter(
                    and_(UserCartPositions.user_cart_id == user_cart.id,
                         UserCartPositions.product_id == product_id)).first()

            if (not check_user_cart_positions):
                user_cart_position_args = {}
                user_cart_position_args['product_id'] = product_id
                user_cart_position_args['user_cart_id'] = user_cart.id
                user_cart_position_args['count'] = count
                user_cart_position_args['alt_count'] = alt_count
                user_cart_position_args['temp_cart_uid'] = str(
                    uuid.uuid4().hex)
                user_cart_position_args['need_invoice'] = False
                user_cart_position_entity = UserCartPositions(
                    user_cart_position_args)
                session.add(user_cart_position_entity)
                session.commit()
            else:
                if (count > 0 or alt_count > 0):
                    check_user_cart_positions.count = count
                    check_user_cart_positions.alt_count = alt_count
                    session.add(check_user_cart_positions)
                    session.commit()
                else:
                    session.delete(check_user_cart_positions)
                    session.commit()

            #calculte total sum
            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
            for cart_position in user_cart_positions:
                count = cart_position.count
                alt_count = cart_position.alt_count
                if (count == 0 and alt_count == 0):
                    continue
                product = session.query(Products).filter(
                    Products.id == cart_position.product_id).first()
                if (currency_id == -1):
                    currency_id = product.currency_id

                if (product.alt_discount_amount == None):
                    product.alt_discount_amount = 0

                if (product.alt_amount == None):
                    product.alt_amount = 0

                if (not product):
                    continue
                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 = 0
            if (total_sum_without_discount != 0):
                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()

            return user_cart

        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="Неопознанная ошибка")
Example #25
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('orders_ids')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            orders_ids = [int(x) for x in args['orders_ids'].split(',')]
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            positions = session.query(OrderPositions) \
                .filter(OrderPositions.order_id.in_(orders_ids),
                        OrderPositions.order_position_state_id != 2).all()

            if not positions:
                abort(404, message="Positions {} doesn't exist".format(id))
            marshlled_positions = marshal(positions, output_fields)

            curr_keys = [
                'count', 'amount_per_item', 'unit_display_value',
                'amount_per_item_discount'
            ]
            alt_keys = [
                'alt_count', 'alt_amount_per_item', 'alt_unit_display_value',
                'alt_amount_per_item_discount'
            ]

            positions = []
            for pos in marshlled_positions:
                if pos['count'] > 0:
                    curr_pos = pos.copy()
                    for alt_key in alt_keys:
                        curr_pos.pop(alt_key)
                    if curr_pos['amount_per_item_discount'] > 0:
                        curr_pos['amount_per_item_discount'] = curr_pos[
                            'amount_per_item'] - curr_pos[
                                'amount_per_item_discount']
                    curr_pos['total_amount'] = curr_pos['count'] * (
                        curr_pos['amount_per_item'] -
                        curr_pos['amount_per_item_discount'])
                    positions.append(curr_pos)
                if pos['alt_count'] > 0:
                    curr_pos = pos.copy()
                    change_dict = dict(zip(curr_keys, alt_keys))
                    for curr_key, alt_key in change_dict.items():
                        curr_pos[curr_key] = curr_pos[alt_key]
                    for alt_key in alt_keys:
                        curr_pos.pop(alt_key)
                    if curr_pos['amount_per_item_discount'] > 0:
                        curr_pos['amount_per_item_discount'] = curr_pos[
                            'amount_per_item'] - curr_pos[
                                'amount_per_item_discount']
                    curr_pos['total_amount'] = curr_pos['count'] * (
                        curr_pos['amount_per_item'] -
                        curr_pos['amount_per_item_discount'])
                    positions.append(curr_pos)
            if len(positions) == 0:
                return "All products have 0 count. Nothing to download."

            titles = [
                "Наименование", "Артикул", "Количество", "Стоимость 1 ед.",
                "Скидка", "Итого", "Акция"
            ]
            docs = {}
            for position in positions:
                if position.get('partner_id', 0) != 0:
                    if position['partner_id'] in docs:
                        docs[position['partner_id']]['total'] += position[
                            'total_amount']
                        if '{}-{}-{}-{}'.format(
                                position['product_id'],
                                '1' if position['is_stock_product'] else '0',
                                position['amount_per_item'],
                                position['amount_per_item_discount'],
                                position['unit_display_value']) in docs[
                                    position['partner_id']]['positions']:
                            docs[position['partner_id']]['positions'][
                                '{}-{}-{}-{}'.format(
                                    position['product_id'], '1'
                                    if position['is_stock_product'] else '0',
                                    position['amount_per_item'],
                                    position['amount_per_item_discount'],
                                    position['unit_display_value']
                                )]['total_amount'] += position['total_amount']
                            docs[position['partner_id']]['positions'][
                                '{}-{}-{}-{}'.format(
                                    position['product_id'], '1'
                                    if position['is_stock_product'] else '0',
                                    position['amount_per_item'],
                                    position['amount_per_item_discount'],
                                    position['unit_display_value']
                                )]['count'] += position['count']
                        else:
                            docs[position['partner_id']]['positions'][
                                '{}-{}-{}-{}'.format(
                                    position['product_id'], '1'
                                    if position['is_stock_product'] else '0',
                                    position['amount_per_item'],
                                    position['amount_per_item_discount'],
                                    position['unit_display_value'])] = position

                    else:
                        docs[position['partner_id']] = {
                            'name': position['partner_name'],
                            'total': position['total_amount'] or 0,
                            'currency': position['currency_display_value'],
                            'positions': {
                                '{}-{}-{}-{}'.format(
                                    position['product_id'], '1' if position['is_stock_product'] else '0', position['amount_per_item'], position['amount_per_item_discount'], position['unit_display_value']):
                                position
                            }
                        }

            styles_dict = {
                'title': ['ota_title', 'ota_text'],
                'subtitle': ['ota_subtitle', 'ota_subtitle', 'ota_subtitle'],
                'subtitle_text': ['ota_text', 'ota_text', 'ota_text'],
                'shop_subtitle': [
                    'shop_ota_subtitle', 'shop_ota_subtitle',
                    'shop_ota_subtitle', 'shop_ota_subtitle',
                    'shop_ota_subtitle'
                ],
                'shop_subtitle_text':
                ['ota_text', 'ota_text', 'ota_text', 'ota_text', 'ota_text'],
                'header': [
                    'ota_header', 'ota_header', 'ota_header', 'ota_header',
                    'ota_header', 'ota_header', 'ota_header'
                ],
                'data_row': [
                    'ota_text', 'ota_num', 'ota_num', 'ota_num', 'ota_num',
                    'ota_num', 'ota_text', 'ota_text'
                ],
                'total_row': [
                    'ota_text', 'ota_text', 'ota_text', 'ota_text',
                    'ota_header', 'ota_header'
                ]
            }

            documents = {}
            dtnow = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
            for key, document in docs.items():
                converted_data_rows = [[[
                    'Погрузочный лист для {}'.format(document['name']), dtnow
                ]]]
                names = [styles_dict['title']]
                names.append(styles_dict['header'])
                converted_data_rows.append([titles])
                for position in document['positions'].values():
                    names.append(styles_dict['data_row'])
                    converted_data_rows.append([self.get_row(position)])

                names.append(styles_dict['total_row'])
                converted_data_rows.append([[
                    '', '', '', '', 'Сум. Итого',
                    '{} {}'.format(document['total'], document['currency'])
                ]])
                documents[key] = {
                    'name': document['name'],
                    'rows': converted_data_rows,
                    'styles': names
                }

            export_folder, export_path = documents_exporter.export_order_positions(
                documents, 3)
            return send_from_directory(export_folder,
                                       export_path,
                                       as_attachment=True)

        except Exception as e:
            return {}
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('orders_ids')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            orders_ids = [int(x) for x in args['orders_ids'].split(',')]
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            positions = session.query(OrderPositions) \
                .filter(OrderPositions.order_id.in_(orders_ids),
                        OrderPositions.order_position_state_id != 2).all()

            if not positions:
                abort(404, message="Positions {} doesn't exist".format(id))
            marshlled_positions = marshal(positions, output_fields)

            curr_keys = [
                'count', 'amount_per_item', 'unit_display_value',
                'amount_per_item_discount'
            ]
            alt_keys = [
                'alt_count', 'alt_amount_per_item', 'alt_unit_display_value',
                'alt_amount_per_item_discount'
            ]

            positions = []
            for pos in marshlled_positions:
                if pos['count'] > 0:
                    curr_pos = pos.copy()
                    for alt_key in alt_keys:
                        curr_pos.pop(alt_key)
                    if curr_pos['amount_per_item_discount'] > 0:
                        curr_pos['amount_per_item_discount'] = curr_pos[
                            'amount_per_item'] - curr_pos[
                                'amount_per_item_discount']
                    curr_pos['total_amount'] = curr_pos['count'] * (
                        curr_pos['amount_per_item'] -
                        curr_pos['amount_per_item_discount'])
                    positions.append(curr_pos)
                if pos['alt_count'] > 0:
                    curr_pos = pos.copy()
                    change_dict = dict(zip(curr_keys, alt_keys))
                    for curr_key, alt_key in change_dict.items():
                        curr_pos[curr_key] = curr_pos[alt_key]
                    for alt_key in alt_keys:
                        curr_pos.pop(alt_key)
                    if curr_pos['amount_per_item_discount'] > 0:
                        curr_pos['amount_per_item_discount'] = curr_pos[
                            'amount_per_item'] - curr_pos[
                                'amount_per_item_discount']
                    curr_pos['total_amount'] = curr_pos['count'] * (
                        curr_pos['amount_per_item'] -
                        curr_pos['amount_per_item_discount'])
                    positions.append(curr_pos)
            if len(positions) == 0:
                return "All products have 0 count. Nothing to download."

            titles = [
                "Наименование", "Артикул", "Количество", "Стоимость 1 ед.",
                "Скидка", "Итого", "Накладная", "Акция"
            ]
            sub_titles = ["Клиент", "Регистрация", "БИН/ИИН"]
            shop_sub_titles = [
                "Магазин", "Адрес", "Город/а.е.", "Регион/Область", "Телефон"
            ]
            docs = {}
            for position in positions:
                if position.get('partner_id', 0) != 0:
                    if position['partner_id'] in docs:
                        docs[position['partner_id']]['total'] += position[
                            'total_amount']
                        if position['client_id'] in docs[
                                position['partner_id']]['clients']:
                            if position['client_address_id'] in \
                                    docs[position['partner_id']]['clients'][position['client_id']]['shops']:
                                docs[position['partner_id']]['clients'][
                                    position['client_id']]['shops'][
                                        position['client_address_id']][
                                            'positions'].append(position)
                                docs[position['partner_id']]['clients'][
                                    position['client_id']]['shops'][
                                        position['client_address_id']][
                                            'total'] += position[
                                                'total_amount']
                            else:
                                docs[position['partner_id']]['clients'][
                                    position['client_id']]['shops'][
                                        position['client_address_id']] = {
                                            'name':
                                            position['client_address_name'],
                                            'address':
                                            position['client_address'],
                                            'city':
                                            position['client_city_name'],
                                            'area':
                                            position['client_area_name'],
                                            'phone': position['client_phone'],
                                            'total': position['total_amount']
                                            or 0,
                                            'positions': [position]
                                        }
                        else:
                            docs[position['partner_id']]['clients'][
                                position['client_id']] = {
                                    'name': position['client_name'],
                                    'registration':
                                    position['registration_number'] or "",
                                    'email': position['client_email'],
                                    'shops': {
                                        position['client_address_id']: {
                                            'name':
                                            position['client_address_name'],
                                            'address':
                                            position['client_address'],
                                            'city':
                                            position['client_city_name'],
                                            'area':
                                            position['client_area_name'],
                                            'total': position['total_amount']
                                            or 0,
                                            'phone': position['client_phone'],
                                            'positions': [position]
                                        }
                                    }
                                }
                    else:
                        docs[position['partner_id']] = {
                            'name': position['partner_name'],
                            'total': position['total_amount'] or 0,
                            'currency': position['currency_display_value'],
                            'clients': {
                                position['client_id']: {
                                    'name':
                                    position['client_name'],
                                    'registration':
                                    position['registration_number'] or "",
                                    'email':
                                    position['client_email'],
                                    'shops': {
                                        position['client_address_id']: {
                                            'name':
                                            position['client_address_name'],
                                            'address':
                                            position['client_address'],
                                            'city':
                                            position['client_city_name'],
                                            'area':
                                            position['client_area_name'],
                                            'total': position['total_amount']
                                            or 0,
                                            'phone': position['client_phone'],
                                            'positions': [position]
                                        }
                                    }
                                }
                            }
                        }
            styles_dict = {
                'title': ['ota_title', 'ota_text'],
                'subtitle': ['ota_subtitle', 'ota_subtitle', 'ota_subtitle'],
                'subtitle_text': ['ota_text', 'ota_text', 'ota_text'],
                'shop_subtitle': [
                    'shop_ota_subtitle', 'shop_ota_subtitle',
                    'shop_ota_subtitle', 'shop_ota_subtitle',
                    'shop_ota_subtitle'
                ],
                'shop_subtitle_text':
                ['ota_text', 'ota_text', 'ota_text', 'ota_text', 'ota_text'],
                'header': [
                    'ota_header', 'ota_header', 'ota_header', 'ota_header',
                    'ota_header', 'ota_header', 'ota_header', 'ota_header'
                ],
                'data_row': [
                    'ota_text', 'ota_num', 'ota_num', 'ota_num', 'ota_num',
                    'ota_num', 'ota_text', 'ota_text'
                ],
                'total_row': [
                    'ota_text', 'ota_text', 'ota_text', 'ota_text',
                    'ota_header', 'ota_header'
                ]
            }

            documents = {}
            dtnow = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
            for key, document in docs.items():
                converted_data_rows = [[[
                    'ТН для {}'.format(document['name']), dtnow
                ]]]
                names = [styles_dict['title']]
                for client in document['clients'].values():
                    names.append(styles_dict['subtitle'])
                    names.append(styles_dict['subtitle_text'])
                    converted_data_rows.append([sub_titles])
                    converted_data_rows.append([[
                        client['name'],
                        client.get('email', ""),
                        client.get('registration', "")
                    ]])
                    for shop in client['shops'].values():
                        names.append(styles_dict['shop_subtitle'])
                        names.append(styles_dict['shop_subtitle_text'])
                        converted_data_rows.append([shop_sub_titles])
                        converted_data_rows.append([[
                            shop.get('name', ""),
                            shop.get('address', ""),
                            shop.get('city', ""),
                            shop.get('area', ""),
                            shop.get('phone', "")
                        ]])
                        names.append(styles_dict['header'])
                        converted_data_rows.append([titles])
                        for position in shop['positions']:
                            names.append(styles_dict['data_row'])
                            converted_data_rows.append(
                                [self.get_row(position)])

                        names.append(styles_dict['total_row'])
                        converted_data_rows.append([[
                            '', '', '', '', 'Итого',
                            '{} {}'.format(shop['total'], document['currency'])
                        ]])

                names.append(styles_dict['total_row'])
                converted_data_rows.append([[
                    '', '', '', '', 'Сум. Итого',
                    '{} {}'.format(document['total'], document['currency'])
                ]])
                documents[key] = {
                    'name': document['name'],
                    'rows': converted_data_rows,
                    'styles': names
                }

            export_folder, export_path = documents_exporter.export_order_positions(
                documents, 10)
            return send_from_directory(export_folder,
                                       export_path,
                                       as_attachment=True)

        except Exception as e:
            return {}
    def get(self):
        error_message = ''
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('user_cart_id')

            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')

            user_id = args['user_id']
            user_cart_id = args['user_cart_id']
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            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).order_by(desc(UserCartPositions.id)).all()

            partner_ids = []
            for position in user_cart_positions:
                product = session.query(Products).filter(Products.id == position.product_id).first()

                if (not product):
                    continue

                if (product.partner_id != None):
                    partner = session.query(PartnersCatalog).filter(PartnersCatalog.id == product.partner_id).first()

                    if (partner != None):
                        if (partner.minimum_order_amount != None and partner.minimum_order_amount > 0):
                            if (partner.id not in partner_ids):
                                partner_ids.append(partner.id)

            partner_sums = []
            for id in partner_ids:

                partner = session.query(PartnersCatalog).filter(PartnersCatalog.id == id).first()

                if (not partner):
                    continue

                partner_sum = [partner.id, partner.name, partner.minimum_order_amount, 0]
                partner_sums.append(partner_sum)

            for position in user_cart_positions:
                product = session.query(Products).filter(Products.id == position.product_id).first()
                if (product.partner_id != None):
                    for partner_sum in partner_sums:
                        if (partner_sum[0] == product.partner_id):
                            count = position.count
                            alt_count = position.alt_count
                            if alt_count is None:
                                alt_count = 0
                            single_amount = product.amount
                            if product.discount_amount > 0:
                                single_amount = product.discount_amount
                            alt_single_amount = product.alt_amount
                            if product.alt_discount_amount > 0:
                                alt_single_amount = product.alt_discount_amount
                            if alt_single_amount is None:
                                alt_single_amount = 0
                            amount = count * single_amount
                            alt_amount = alt_single_amount * alt_count
                            t_amount = amount + alt_amount
                            partner_sum[3] += t_amount
                            break

            result_arr = []

            for partner_sum in partner_sums:
                if (partner_sum[2] > partner_sum[3]):
                    result_arr.append(partner_sum)

            return result_arr
        except Exception as e:
            abort(400, message=error_message)
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('product_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = int(args['user_id'])
            product_id = int(args['product_id'])
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            product = session.query(Products).filter(
                Products.id == product_id).first()
            # products = products.
            if not product:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')

            product.can_comments = False

            orders = session.query(Orders).filter(
                Orders.user_id == user_id).all()

            for order in orders:
                order_positions = session.query(OrderPositions).filter(
                    and_(OrderPositions.order_id == order.id,
                         OrderPositions.product_id == product.id)).first()

                if (order_positions != None):
                    product.can_comments = True
                    break

            comments = session.query(ProductComments).filter(
                ProductComments.product_id == product.id).order_by(
                    desc(ProductComments.creation_date)).all()

            product.comments = comments
            # product.comments_count = 0
            # product.rate = 0

            if (not comments):
                product.comments = []

            if (product.comments != None):
                # total_rate = 0
                # comments_count = 0
                for comment in product.comments:
                    # total_rate += comment.rate
                    # comments_count += 1

                    user_id = comment.user_id
                    user_info = session.query(UserInfo).filter(
                        UserInfo.user_id == user_id).first()

                    if (not user_info):
                        continue

                    avatar_id = user_info.avatar_id

                    if (avatar_id != None):
                        avatar = session.query(Attachments).filter(
                            Attachments.id == avatar_id).first()
                        if (not avatar):
                            continue

                        comment.comment_user_data.avatar = avatar

                # if (comments_count > 0):
                #     product.comments_count = comments_count
                #     product.rate = round((total_rate / comments_count), 2)

            return product

        except Exception as e:
            abort(400, message="Product details Error")
            if (hasattr(e, 'data')):
                if (e.data != None and "message" in e.data):
                    abort(400, message=e.data["message"])
Example #29
0
    def get(self):
        try:
            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('order_id')
            parser.add_argument('user_cart_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = int(args['user_id'])
            order_id = int(args['order_id'])
            user_cart_id = int(args['user_cart_id'])
            user_action_logging.log_user_actions(ROUTE, user_id, action_type)

            old_order = session.query(Orders).filter(
                Orders.id == order_id).first()

            if (not old_order):
                abort(400, message="Order not found")

            old_order_positions = session.query(OrderPositions).filter(
                OrderPositions.order_id == old_order.id).all()

            if (not old_order_positions):
                abort(400, message="Order positions not found")

            user_cart = {}
            if (user_cart_id == -1):
                user_cart_args = {}
                user_cart_args["user_id"] = user_id
                user_cart_entity = UserCarts(user_cart_args)
                session.add(user_cart_entity)
                session.commit()
                user_cart = user_cart_entity
            else:
                user_cart = session.query(UserCarts).filter(
                    UserCarts.id == user_cart_id).first()

            for old_position in old_order_positions:
                user_cart_position_args = {}
                user_cart_position_args['product_id'] = old_position.product_id
                user_cart_position_args['user_cart_id'] = user_cart.id
                user_cart_position_args['count'] = old_position.count
                user_cart_position_args['temp_cart_uid'] = str(
                    uuid.uuid4().hex)
                user_cart_position_args[
                    'need_invoice'] = old_position.need_invoice
                user_cart_position_args['alt_count'] = old_position.alt_count
                user_cart_position_entity = UserCartPositions(
                    user_cart_position_args)
                session.add(user_cart_position_entity)
                session.commit()

                pass

            response = {'cart_id': user_cart.id}

            return response
        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="Неопознанная ошибка")
Example #30
0
    def get(self):
        try:

            action_type = 'GET'
            parser = reqparse.RequestParser()
            parser.add_argument('user_id')
            parser.add_argument('category_id')
            parser.add_argument('user_cart_id')
            args = parser.parse_args()
            if (len(args) == 0):
                abort(400, message='Arguments not found')
            user_id = args['user_id']
            category_id = int(args['category_id'])
            user_cart_id = self.get_user_cart_argument(args)

            user_action_logging.log_user_actions(ROUTE, user_id, action_type)
            products = session.query(Products).filter(
                Products.category_id == category_id,
                Products.is_delete == False).order_by(Products.amount).all()
            # products = products.
            if not products:
                abort(400,
                      message='Ошибка получения данных. Данные не найдены')
            for product in products:
                if (user_cart_id == -1):
                    product.count = 1
                    product.alt_count = 0
                else:
                    user_cart = session.query(UserCarts).filter(
                        UserCarts.id == user_cart_id).first()
                    check_user_cart_positions = session.query(
                        UserCartPositions).filter(
                            and_(
                                UserCartPositions.user_cart_id == user_cart.id,
                                UserCartPositions.product_id ==
                                product.id)).first()

                    if (not check_user_cart_positions):
                        product.count = 1
                        product.alt_count = 0
                    else:
                        product.count = check_user_cart_positions.count
                        product.alt_count = check_user_cart_positions.alt_count

                    pass

            product_position = session.query(ProductsPositions) \
                .filter(ProductsPositions.category_id == category_id).first()
            if product_position is not None and len(
                    product_position.products_positions) > 0:
                positioned_products = [
                    x for x in product_position.products_positions
                ]
                other_prods = []
                for prod in products:
                    if prod.id in product_position.products_positions:
                        positioned_products[positioned_products.index(
                            prod.id)] = prod
                    else:
                        other_prods.append(prod)
                products = positioned_products + other_prods
            # products.internal_products_count = len(products)

            return products
        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="Неопознанная ошибка")
        finally:
            pass