コード例 #1
0
	def test_add_item_variant_without_web_item_to_cart(self):
		"Test adding Variants having no Website Items in cart via Template Web Item."
		from erpnext.controllers.item_variant import create_variant
		from erpnext.e_commerce.doctype.website_item.website_item import make_website_item
		from erpnext.stock.doctype.item.test_item import make_item

		template_item = make_item(
			"Test-Tshirt-Temp",
			{
				"has_variant": 1,
				"variant_based_on": "Item Attribute",
				"attributes": [{"attribute": "Test Size"}, {"attribute": "Test Colour"}],
			},
		)
		variant = create_variant("Test-Tshirt-Temp", {"Test Size": "Small", "Test Colour": "Red"})
		variant.save()
		make_website_item(template_item)  # publish template not variant

		update_cart("Test-Tshirt-Temp-S-R", 1)

		cart = get_cart_quotation()  # test if cart page gets data without errors
		doc = cart.get("doc")

		self.assertEqual(doc.get("items")[0].item_name, "Test-Tshirt-Temp-S-R")

		# test if items are rendered without error
		frappe.render_template("templates/includes/cart/cart_items.html", cart)
コード例 #2
0
    def setUp(self):
        item = make_item("Test Mobile Phone")
        if not frappe.db.exists("Website Item",
                                {"item_code": "Test Mobile Phone"}):
            make_website_item(item, save=True)

        setup_e_commerce_settings({"enable_reviews": 1})
        frappe.local.shopping_cart_settings = None
コード例 #3
0
	def setUp(self):
		item = make_item("Test Phone Series X")
		if not frappe.db.exists("Website Item", {"item_code": "Test Phone Series X"}):
			make_website_item(item, save=True)

		item = make_item("Test Phone Series Y")
		if not frappe.db.exists("Website Item", {"item_code": "Test Phone Series Y"}):
			make_website_item(item, save=True)
コード例 #4
0
	def setUp(self):
		frappe.set_user("Administrator")
		create_test_contact_and_address()
		self.enable_shopping_cart()
		if not frappe.db.exists("Website Item", {"item_code": "_Test Item"}):
			make_website_item(frappe.get_cached_doc("Item",  "_Test Item"))

		if not frappe.db.exists("Website Item", {"item_code": "_Test Item 2"}):
			make_website_item(frappe.get_cached_doc("Item",  "_Test Item 2"))
コード例 #5
0
ファイル: test_website_item.py プロジェクト: ankush/erpnext
	def test_website_item_breadcrumbs(self):
		"Check if breadcrumbs include homepage, product listing navigation page, parent item group(s) and item group."
		from erpnext.setup.doctype.item_group.item_group import get_parent_item_groups

		item_code = "Test Breadcrumb Item"
		item = make_item(
			item_code,
			{
				"item_group": "_Test Item Group B - 1",
			},
		)

		if not frappe.db.exists("Website Item", {"item_code": item_code}):
			web_item = make_website_item(item, save=False)
			web_item.save()
		else:
			web_item = frappe.get_cached_doc("Website Item", {"item_code": item_code})

		frappe.db.set_value("Item Group", "_Test Item Group B - 1", "show_in_website", 1)
		frappe.db.set_value("Item Group", "_Test Item Group B", "show_in_website", 1)

		breadcrumbs = get_parent_item_groups(item.item_group)

		self.assertEqual(breadcrumbs[0]["name"], "Home")
		self.assertEqual(breadcrumbs[1]["name"], "Shop by Category")
		self.assertEqual(breadcrumbs[2]["name"], "_Test Item Group B")  # parent item group
		self.assertEqual(breadcrumbs[3]["name"], "_Test Item Group B - 1")

		# tear down
		web_item.delete()
		item.delete()
コード例 #6
0
    def test_publish_variant_and_template(self):
        "Check if template is published on publishing variant."
        # template "Test Web Item" created on setUp
        variant = create_variant("Test Web Item", {"Test Size": "Large"})
        variant.save()

        # check if template is not published
        self.assertIsNone(
            frappe.db.exists("Website Item",
                             {"item_code": variant.variant_of}))

        variant_web_item = make_website_item(variant, save=False)
        variant_web_item.save()

        # check if template is published
        try:
            template_web_item = frappe.get_doc(
                "Website Item", {"item_code": variant.variant_of})
        except frappe.DoesNotExistError:
            self.fail(
                f"Template of {variant.item_code}, {variant.variant_of} not published"
            )

        # teardown
        variant_web_item.delete()
        template_web_item.delete()
        variant.delete()
コード例 #7
0
ファイル: test_website_item.py プロジェクト: ankush/erpnext
	def test_impact_on_merging_items(self):
		"Check if merging items is blocked if old and new items both have website items"
		first_item = make_item("Test First Item")
		second_item = make_item("Test Second Item")

		first_web_item = make_website_item(first_item, save=False)
		first_web_item.save()
		second_web_item = make_website_item(second_item, save=False)
		second_web_item.save()

		with self.assertRaises(DataValidationError):
			frappe.rename_doc("Item", "Test First Item", "Test Second Item", merge=True)

		# tear down
		second_web_item.delete()
		first_web_item.delete()
		second_item.delete()
		first_item.delete()
def make_new_website_item(item: str) -> Union[str, None]:
    try:
        doc = frappe.get_doc("Item", item)
        web_item = make_website_item(
            doc)  # returns [website_item.name, item_name]
        return web_item[0]
    except Exception:
        doc.log_error("Website Item creation failed")
        return None
def make_new_website_item(item: str) -> Union[str, None]:
	try:
		doc = frappe.get_doc("Item", item)
		web_item = make_website_item(doc)  # returns [website_item.name, item_name]
		return web_item[0]
	except Exception:
		title = f"{item}: Error while converting to Website Item "
		frappe.log_error(
			title + "for Item Card Group Template" + "\n\n" + frappe.get_traceback(), title=title
		)
		return None
コード例 #10
0
def create_variant_web_item():
    "Create Variant and Template Website Items."
    from erpnext.controllers.item_variant import create_variant
    from erpnext.e_commerce.doctype.website_item.website_item import make_website_item
    from erpnext.stock.doctype.item.test_item import make_item

    make_item(
        "Test Web Item", {
            "has_variant": 1,
            "variant_based_on": "Item Attribute",
            "attributes": [{
                "attribute": "Test Size"
            }]
        })
    if not frappe.db.exists("Item", "Test Web Item-L"):
        variant = create_variant("Test Web Item", {"Test Size": "Large"})
        variant.save()

    if not frappe.db.exists("Website Item", {"variant_of": "Test Web Item"}):
        make_website_item(variant, save=True)
コード例 #11
0
    def setUpClass(cls):
        super().setUpClass()
        template_item = make_item(
            "Test-Tshirt-Temp",
            {
                "has_variant":
                1,
                "variant_based_on":
                "Item Attribute",
                "attributes": [{
                    "attribute": "Test Size"
                }, {
                    "attribute": "Test Colour"
                }],
            },
        )

        # create L-R, L-G, M-R, M-G and S-R
        for size in (
                "Large",
                "Medium",
        ):
            for colour in (
                    "Red",
                    "Green",
            ):
                variant = create_variant("Test-Tshirt-Temp", {
                    "Test Size": size,
                    "Test Colour": colour
                })
                variant.save()

        variant = create_variant("Test-Tshirt-Temp", {
            "Test Size": "Small",
            "Test Colour": "Red"
        })
        variant.save()

        make_website_item(template_item)  # publish template not variants
コード例 #12
0
ファイル: test_website_item.py プロジェクト: ankush/erpnext
def create_regular_web_item(item_code=None, item_args=None, web_args=None):
	"Create Regular Item and Website Item."
	item_code = item_code or "Test Mobile Phone"
	item = make_item(item_code, properties=item_args)

	if not frappe.db.exists("Website Item", {"item_code": item_code}):
		web_item = make_website_item(item, save=False)
		if web_args:
			web_item.update(web_args)
		web_item.save()
	else:
		web_item = frappe.get_cached_doc("Website Item", {"item_code": item_code})

	return web_item
コード例 #13
0
    def test_website_item_desk_item_sync(self):
        "Check creation/updation/deletion of Website Item and its impact on Item master."
        web_item = None
        item = make_item("Test Web Item")  # will return item if exists
        try:
            web_item = make_website_item(item, save=False)
            web_item.save()
        except Exception:
            self.fail(f"Error while creating website item for {item}")

        # check if website item was created
        self.assertTrue(bool(web_item))
        self.assertTrue(bool(web_item.route))

        item.reload()
        self.assertEqual(web_item.published, 1)
        self.assertEqual(item.published_in_website,
                         1)  # check if item was back updated
        self.assertEqual(web_item.item_group, item.item_group)

        # check if changing item data changes it in website item
        item.item_name = "Test Web Item 1"
        item.stock_uom = "Unit"
        item.save()
        web_item.reload()
        self.assertEqual(web_item.item_name, item.item_name)
        self.assertEqual(web_item.stock_uom, item.stock_uom)

        # check if disabling item unpublished website item
        item.disabled = 1
        item.save()
        web_item.reload()
        self.assertEqual(web_item.published, 0)

        # check if website item deletion, unpublishes desk item
        web_item.delete()
        item.reload()
        self.assertEqual(item.published_in_website, 0)

        item.delete()
コード例 #14
0
def execute():
    frappe.reload_doc("e_commerce", "doctype", "website_item")
    frappe.reload_doc("e_commerce", "doctype", "website_item_tabbed_section")
    frappe.reload_doc("e_commerce", "doctype", "website_offer")
    frappe.reload_doc("e_commerce", "doctype", "recommended_items")
    frappe.reload_doc("e_commerce", "doctype", "e_commerce_settings")
    frappe.reload_doc("stock", "doctype", "item")

    item_fields = [
        "item_code",
        "item_name",
        "item_group",
        "stock_uom",
        "brand",
        "image",
        "has_variants",
        "variant_of",
        "description",
        "weightage",
    ]
    web_fields_to_map = [
        "route",
        "slideshow",
        "website_image_alt",
        "website_warehouse",
        "web_long_description",
        "website_content",
        "thumbnail",
    ]

    # get all valid columns (fields) from Item master DB schema
    item_table_fields = frappe.db.sql("desc `tabItem`", as_dict=1)
    item_table_fields = [d.get("Field") for d in item_table_fields]

    # prepare fields to query from Item, check if the web field exists in Item master
    web_query_fields = []
    for web_field in web_fields_to_map:
        if web_field in item_table_fields:
            web_query_fields.append(web_field)
            item_fields.append(web_field)

    # check if the filter fields exist in Item master
    or_filters = {}
    for field in ["show_in_website", "show_variant_in_website"]:
        if field in item_table_fields:
            or_filters[field] = 1

    if not web_query_fields or not or_filters:
        # web fields to map are not present in Item master schema
        # most likely a fresh installation that doesnt need this patch
        return

    items = frappe.db.get_all("Item",
                              fields=item_fields,
                              or_filters=or_filters)
    total_count = len(items)

    for count, item in enumerate(items, start=1):
        if frappe.db.exists("Website Item", {"item_code": item.item_code}):
            continue

        # make new website item from item (publish item)
        website_item = make_website_item(item, save=False)
        website_item.ranking = item.get("weightage")

        for field in web_fields_to_map:
            website_item.update({field: item.get(field)})

        website_item.save()

        # move Website Item Group & Website Specification table to Website Item
        for doctype in ("Website Item Group", "Item Website Specification"):
            frappe.db.set_value(
                doctype,
                {
                    "parenttype": "Item",
                    "parent": item.item_code
                },  # filters
                {
                    "parenttype": "Website Item",
                    "parent": website_item.name
                },  # value dict
            )

        if count % 20 == 0:  # commit after every 20 items
            frappe.db.commit()

        frappe.utils.update_progress_bar("Creating Website Items", count,
                                         total_count)