示例#1
0
def get_product_by_product_code(productCode) -> dict:
    # Get Product Details
    pr = ProductResource()
    product_record = pr.get_product_by_product_code(productCode)

    try:
        if product_record is not None:
            # Get Product images
            image_records = get_product_images(product_record['id'])

            # Converting Decimal to float (Python serializable)
            product_record['price'] = float(product_record['price'])

            # Packing data in the Model
            product_record = Product(product_record)
            if image_records is not None:
                product_record.imageList = image_records

            result = {
                'status': "success",
                'message': "successfully retrieved product",
                'data': product_record.__dict__
            }

        else:
            result = {
                'status': "error",
                'data': None,
                'Message': "No data found"
            }
    except Exception as e:
        result = {'status': "error", 'data': None, 'Message': str(e)}

    return result
示例#2
0
def search_products(identifier, identifierType):
    """
    Takes an identifier value and returns the product codes or barcodes
    of products in the database that are similar to the identifier

    Args:
        identifier: a potential product code or barcode
        identifierType: 'barcode' or 'productCode'

    Returns:
        JSON object including a list of similar identifiers, or no identifiers, if none were found
    """

    product_resource = ProductResource()
    product_identifiers = product_resource.search_products(
        identifier, identifierType)

    if not product_identifiers:
        result = {
            'status': 'error',
            'identifiers': None,
            'message':
            'No barcodes or product codes match the given identifier'
        }
    else:
        result = {
            'status': 'success',
            'identifiers': product_identifiers,
            'message':
            'Successfully retrieved similar barcodes or product codes'
        }

    return result
示例#3
0
def list_all_products(category_id=None, page=1, page_size=20):
    # List products
    result = ProductResource().list_products_by_category(
        category_id, page, page_size)
    # set product price
    ProductResource().assign_price_and_images_to_product(result['items'])
    return result
示例#4
0
def import_metadata(data) -> dict:
    username = data['Username']
    password = data['Password']
    try:
        user_resource = UserResource()
        org_id = user_resource.validate_username_password(username, password)
    except AttributeError:
        return {'status': "failure", "message": "LOGIN_ERROR"}

    if org_id is None:
        # wrong username or password
        return {'status': "failure", "message": "LOGIN_ERROR"}
    product_list = data['Products']
    errormessage = ""
    for product in product_list:
        code = product['Code']
        product_resource = ProductResource()
        product_id = product_resource.get_product_id_by_product_code(code)
        if product_id is None:
            errormessage += '"' + code + '" '
            continue
        model_metadata_resource = ModelMetadataResource()
        res = model_metadata_resource.get_metadata_by_product_code(code)
        json_dict = {}
        for element in product['ProductParameters']:
            json_dict[element['Key']] = element['Value']
        json_string = json.dumps(json_dict)
        json_string.replace('\'', '\"')

        if res is not None:
            status_code = model_metadata_resource.update_metadata(
                code, str(json_string))
            if status_code == 0:
                errormessage += '\"' + code + '\" '
            continue
        status_code = model_metadata_resource.insert_metadata(
            product_id, code, str(json_string))
        if status_code == 0:
            errormessage += '\"' + code + '\" '
            continue
    if errormessage == "":
        return {
            "status": "success",
            "message": "metadata was imported successfully"
        }
    else:
        return {
            "status":
            "partial success",
            "message":
            "product code with " + errormessage +
            "failed to upload, please check the product code or "
            "try again"
        }
示例#5
0
def import_threedmodel(data) -> dict:
    username = data['Username']
    password = data['Password']
    try:
        user_resource = UserResource()
        org_id = user_resource.validate_username_password(username, password)
    except AttributeError:
        return {'status': "failure", "message": "LOGIN_ERROR"}

    if org_id is None:
        # wrong username or password
        return {'status': "failure", "message": "LOGIN_ERROR"}
    product_list = data['Products']
    errormessage = ""
    # for each product
    for product in product_list:
        # check if the product exist
        code = product['Code']
        product_resource = ProductResource()
        product_id_list = product_resource.search_product_id_by_product_code(
            code)
        if product_id_list is None:
            errormessage += "\"" + code + "\" "
            continue
        # make a list of id, get one URl link check if the record exist in image
        id_list = []
        url = product['ModelURL']
        for product_id in product_id_list:
            id_list.append(product_id['id'])
        image_resource = ImageResource()
        record = image_resource.get_threed_link_by_product_id(id_list[0])
        if record is None:
            status_code = image_resource.insert_threed_model(url, id_list)
            if status_code == 0:
                errormessage += "\"" + code + "\" "
            continue
        else:
            link = record['threeDModelLocation']
            if link is None or link != url:
                image_resource.update_threed_link(url, id_list)
    if errormessage == "":
        return {
            'status': "success",
            "message": "3d model have been imported successfully"
        }
    else:
        return {
            'status':
            "partial success",
            "message":
            "product code contains:" + errormessage +
            " failed to import ,please check product code or import again"
        }
示例#6
0
def retrieve_prices() -> dict:
    connection = authUtil.build_connection()
    data_type = 37
    success, price_list = connection.retrieve_organisation_data(data_type)
    product_resource = ProductResource()
    if success:
        return product_resource.store_prices(price_list)

    return {
        'status': 'error',
        'data': None,
        'Message': 'Error while retrieving product prices data from server'
    }
示例#7
0
def retrieve_products(customer_code="TESTDEBTOR") -> dict:
    connection = authUtil.build_connection()
    data_type = 3
    success, product_list = connection.retrieve_organisation_data(
        data_type, customer_code=customer_code)
    product_resource = ProductResource()
    if success:
        return product_resource.store_products(product_list)

    return {
        'status': "error",
        'data': None,
        'Message': "Error while retrieving products data from server"
    }
示例#8
0
def update_prices(customer_code='TESTDEBTOR') -> dict:
    connection = authUtil.build_connection()
    data_type = 37
    success, price_list = connection.retrieve_organisation_data(
        data_type, customer_code)
    product_resource = ProductResource()

    if success:
        return product_resource.update_prices(price_list)

    return {
        'status': 'error',
        'data': None,
        'Message': "Error while retrieving product price from SQUIZZ server"
    }