Exemplo n.º 1
0
def oc_validate(doc, method=None):
    if doc.get('oc_is_updating', 1):
        doc.update({'oc_is_updating': 0})
        return
    db_item = frappe.db.get('Item', doc.get('item_code'))
    if not (db_item and db_item.get('oc_sync_to')):
        return
    doc_item = frappe.get_doc('Item', db_item.get('name'))
    update_item(doc_item, doc)

    # push Item to Opencart site
    site_name = resolve_site_from_item_price(doc)
    doc_item = frappe.get_doc('Item', doc_item.get('name'))
    items.push_item_to_oc(doc_item, site_name)
def oc_validate(doc, method=None):
    if doc.get('oc_is_updating', 1):
        doc.update({'oc_is_updating': 0})
        return
    db_item = frappe.db.get('Item', doc.get('item_code'))
    if not (db_item and db_item.get('oc_sync_to')):
        return
    doc_item = frappe.get_doc('Item', db_item.get('name'))
    update_item(doc_item, doc)

    # push Item to Opencart site
    site_name = resolve_site_from_item_price(doc)
    doc_item = frappe.get_doc('Item', doc_item.get('name'))
    items.push_item_to_oc(doc_item, site_name)
Exemplo n.º 3
0
def pull(site_name, item_code=None, silent=False):
    '''Sync Item Prices from Opencart site'''
    results = {}
    results_list = []
    check_count = 0
    update_count = 0
    add_count = 0
    skip_count = 0
    success = True

    doc_stores = oc_stores.get_all(site_name)
    oc_api_cache = {}
    customer_groups_cache = {}

    for doc_store in doc_stores:
        if doc_store.get('oc_store_front_url') and doc_store.get(
                'oc_price_lists'):
            oc_api_cache[doc_store.get('name')] = oc_api.get(
                site_name, doc_store.get('oc_store_front_url'))
            print('store name=' + doc_store.get('oc_store_front_url'))
            # fill cache of customer groups
            for doc_oc_price_list in doc_store.get('oc_price_lists'):
                customer_group_name = doc_oc_price_list.get('customer_group')
                db_customer_group = frappe.db.get(
                    'Customer Group', {'name': customer_group_name})
                if not db_customer_group:
                    frappe.msgprint(
                        'Customer Group is not set for Opencart Price List in Opencart Store "%s"'
                        % doc_store.get('name'))
                    continue
                customer_groups_cache[db_customer_group.get(
                    'name')] = db_customer_group

    all_dict_items = []
    if item_code:
        all_dict_items = frappe.get_all(
            'Item',
            fields=['name', 'item_code'],
            filters={'item_code': item_code.upper()})
    else:
        all_dict_items = frappe.get_all('Item', fields=['name', 'item_code'])
    items_count_left_to_process = len(all_dict_items)
    for dict_item in all_dict_items:
        # for dict_item in [it for it in frappe.get_all('Item', fields=['name', 'item_code']) if it.get('name') == 'TESTAH']:
        item_code = dict_item.get('item_code')
        items_count_left_to_process -= 1
        print('processing %s, left to process %d' %
              (item_code or '', items_count_left_to_process))
        doc_oc_product = items.get_opencart_product(site_name,
                                                    dict_item.get('name'))
        if not doc_oc_product:
            skip_count += 1
            continue
        oc_product_id = doc_oc_product.get('oc_product_id')
        doc_item = frappe.get_doc('Item', dict_item.get('name'))
        for doc_store in doc_stores:
            oc_api_obj = oc_api_cache.get(doc_store.get('name'))
            if oc_api_obj:
                get_product_success, oc_product = oc_api_obj.get_product(
                    oc_product_id)
                if not get_product_success:
                    skip_count += 1
                    extras = (
                        1, 'skipped',
                        'Skipped: cannot get product with product_id %s' %
                        oc_product_id)
                    results_list.append(('', '', '', '', '') + extras)
                    continue
            # TODO
            # updating item for each store
            # items.update_item(site_name, doc_item, oc_product)
            for doc_oc_price_list in doc_store.get('oc_price_lists'):
                check_count += 1
                price_list_name = doc_oc_price_list.get('price_list')
                customer_group_name = doc_oc_price_list.get('customer_group')
                doc_price_list = frappe.get_doc('Price List', price_list_name)
                doc_item_price = get(item_code, price_list_name)

                # resolve price
                price = items.get_oc_product_price(
                    oc_product, doc_price_list.get('currency'))
                # price = float(oc_product.get('price', 0))
                customer_group_id = customer_groups_cache.get(
                    customer_group_name, {}).get('oc_customer_group_id')
                for discount in oc_product.get('discounts'):
                    if customer_group_id == discount.get(
                            'customer_group_id') and int(
                                discount.get('quantity', 0)) == 1:
                        # price = float(discount.get('price', 0))
                        price = items.get_oc_discount_price(
                            discount, doc_price_list.get('currency'))
                if doc_item_price:
                    # update existed Item Price
                    doc_item_price.update({
                        'price_list_rate': price,
                        'oc_is_updating': 1
                    })
                    doc_item_price.save()
                    update_count += 1
                    extras = (1, 'updated', 'Updated')
                    results_list.append(
                        (doc_item_price.get('name'),
                         doc_item_price.get('item_code'),
                         doc_item_price.get('price_list'),
                         doc_item_price.get('currency'),
                         doc_item_price.get('price_list_rate')) + extras)
                else:
                    # create new Item Price
                    params = {
                        'doctype': 'Item Price',
                        'oc_is_updating': 1,
                        'selling': 1,
                        'item_code': item_code,
                        'price_list': price_list_name,
                        'price_list_rate': price
                    }
                    doc_item_price = frappe.get_doc(params)
                    doc_item_price.insert(ignore_permissions=True)
                    add_count += 1
                    extras = (1, 'added', 'Added')
                    results_list.append(
                        (doc_item_price.get('name'),
                         doc_item_price.get('item_code'),
                         doc_item_price.get('price_list'),
                         doc_item_price.get('currency'),
                         doc_item_price.get('price_list_rate')) + extras)

                update_item(doc_item, doc_item_price)
        # get again updated Item and pushing it to Opencart site
        doc_item = frappe.get_doc('Item', doc_item.get('name'))
        items.push_item_to_oc(doc_item, site_name)

    results = {
        'check_count': check_count,
        'add_count': add_count,
        'update_count': update_count,
        'skip_count': skip_count,
        'results': results_list,
        'success': success,
    }
    return results
def pull(site_name, item_code=None, silent=False):
    '''Sync Item Prices from Opencart site'''
    results = {}
    results_list = []
    check_count = 0
    update_count = 0
    add_count = 0
    skip_count = 0
    success = True

    doc_stores = oc_stores.get_all(site_name)
    oc_api_cache = {}
    customer_groups_cache = {}

    for doc_store in doc_stores:
        if doc_store.get('oc_store_front_url') and doc_store.get('oc_price_lists'):
            oc_api_cache[doc_store.get('name')] = oc_api.get(site_name, doc_store.get('oc_store_front_url'))
            print('store name=' + doc_store.get('oc_store_front_url'))
            # fill cache of customer groups
            for doc_oc_price_list in doc_store.get('oc_price_lists'):
                customer_group_name = doc_oc_price_list.get('customer_group')
                db_customer_group = frappe.db.get('Customer Group', {'name': customer_group_name})
                if not db_customer_group:
                    frappe.msgprint('Customer Group is not set for Opencart Price List in Opencart Store "%s"' % doc_store.get('name'))
                    continue
                customer_groups_cache[db_customer_group.get('name')] = db_customer_group

    all_dict_items = []
    if item_code:
        all_dict_items = frappe.get_all('Item', fields=['name', 'item_code'], filters={'item_code': item_code.upper()})
    else:
        all_dict_items = frappe.get_all('Item', fields=['name', 'item_code'])
    items_count_left_to_process = len(all_dict_items)
    for dict_item in all_dict_items:
    # for dict_item in [it for it in frappe.get_all('Item', fields=['name', 'item_code']) if it.get('name') == 'TESTAH']:
        item_code = dict_item.get('item_code')
        items_count_left_to_process -= 1
        print('processing %s, left to process %d' % (item_code or '', items_count_left_to_process))
        doc_oc_product = items.get_opencart_product(site_name, dict_item.get('name'))
        if not doc_oc_product:
            skip_count += 1
            continue
        oc_product_id = doc_oc_product.get('oc_product_id')
        doc_item = frappe.get_doc('Item', dict_item.get('name'))
        for doc_store in doc_stores:
            oc_api_obj = oc_api_cache.get(doc_store.get('name'))
            if oc_api_obj:
                get_product_success, oc_product = oc_api_obj.get_product(oc_product_id)
                if not get_product_success:
                    skip_count += 1
                    extras = (1, 'skipped', 'Skipped: cannot get product with product_id %s' % oc_product_id)
                    results_list.append(('', '', '', '', '') + extras)
                    continue
            # TODO
            # updating item for each store
            # items.update_item(site_name, doc_item, oc_product)
            for doc_oc_price_list in doc_store.get('oc_price_lists'):
                check_count += 1
                price_list_name = doc_oc_price_list.get('price_list')
                customer_group_name = doc_oc_price_list.get('customer_group')
                doc_price_list = frappe.get_doc('Price List', price_list_name)
                doc_item_price = get(item_code, price_list_name)

                # resolve price
                price = items.get_oc_product_price(oc_product, doc_price_list.get('currency'))
                # price = float(oc_product.get('price', 0))
                customer_group_id = customer_groups_cache.get(customer_group_name, {}).get('oc_customer_group_id')
                for discount in oc_product.get('discounts'):
                    if customer_group_id == discount.get('customer_group_id') and int(discount.get('quantity', 0)) == 1:
                        # price = float(discount.get('price', 0))
                        price = items.get_oc_discount_price(discount, doc_price_list.get('currency'))
                if doc_item_price:
                    # update existed Item Price
                    doc_item_price.update({
                        'price_list_rate': price,
                        'oc_is_updating': 1
                    })
                    doc_item_price.save()
                    update_count += 1
                    extras = (1, 'updated', 'Updated')
                    results_list.append((doc_item_price.get('name'),
                                        doc_item_price.get('item_code'),
                                        doc_item_price.get('price_list'),
                                        doc_item_price.get('currency'),
                                        doc_item_price.get('price_list_rate')) + extras)
                else:
                    # create new Item Price
                    params = {
                        'doctype': 'Item Price',
                        'oc_is_updating': 1,
                        'selling': 1,
                        'item_code': item_code,
                        'price_list': price_list_name,
                        'price_list_rate': price
                    }
                    doc_item_price = frappe.get_doc(params)
                    doc_item_price.insert(ignore_permissions=True)
                    add_count += 1
                    extras = (1, 'added', 'Added')
                    results_list.append((doc_item_price.get('name'),
                                        doc_item_price.get('item_code'),
                                        doc_item_price.get('price_list'),
                                        doc_item_price.get('currency'),
                                        doc_item_price.get('price_list_rate')) + extras)

                update_item(doc_item, doc_item_price)
        # get again updated Item and pushing it to Opencart site
        doc_item = frappe.get_doc('Item', doc_item.get('name'))
        items.push_item_to_oc(doc_item, site_name)

    results = {
        'check_count': check_count,
        'add_count': add_count,
        'update_count': update_count,
        'skip_count': skip_count,
        'results': results_list,
        'success': success,
    }
    return results