mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-25 22:21:31 +01:00
fix(pos): get parent item group without user permission (#46020)
* fix(pos): get parent item group without user permission
* feat: add item group filter based on user permission
---------
Co-authored-by: venkat102 <venkatesharunachalam659@gmail.com>
(cherry picked from commit 8caf7f275e)
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _, msgprint, scrub, unscrub
|
from frappe import _, msgprint, scrub, unscrub
|
||||||
|
from frappe.core.doctype.user_permission.user_permission import get_permitted_documents
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import get_link_to_form, now
|
from frappe.utils import get_link_to_form, now
|
||||||
|
|
||||||
@@ -204,17 +205,41 @@ class POSProfile(Document):
|
|||||||
def get_item_groups(pos_profile):
|
def get_item_groups(pos_profile):
|
||||||
item_groups = []
|
item_groups = []
|
||||||
pos_profile = frappe.get_cached_doc("POS Profile", pos_profile)
|
pos_profile = frappe.get_cached_doc("POS Profile", pos_profile)
|
||||||
|
permitted_item_groups = get_permitted_nodes("Item Group")
|
||||||
|
|
||||||
if pos_profile.get("item_groups"):
|
if pos_profile.get("item_groups"):
|
||||||
# Get items based on the item groups defined in the POS profile
|
# Get items based on the item groups defined in the POS profile
|
||||||
for data in pos_profile.get("item_groups"):
|
for data in pos_profile.get("item_groups"):
|
||||||
item_groups.extend(
|
item_groups.extend(
|
||||||
["%s" % frappe.db.escape(d.name) for d in get_child_nodes("Item Group", data.item_group)]
|
[
|
||||||
|
"%s" % frappe.db.escape(d.name)
|
||||||
|
for d in get_child_nodes("Item Group", data.item_group)
|
||||||
|
if not permitted_item_groups or d.name in permitted_item_groups
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not item_groups and permitted_item_groups:
|
||||||
|
item_groups = ["%s" % frappe.db.escape(d) for d in permitted_item_groups]
|
||||||
|
|
||||||
return list(set(item_groups))
|
return list(set(item_groups))
|
||||||
|
|
||||||
|
|
||||||
|
def get_permitted_nodes(group_type):
|
||||||
|
nodes = []
|
||||||
|
permitted_nodes = get_permitted_documents(group_type)
|
||||||
|
|
||||||
|
if not permitted_nodes:
|
||||||
|
return nodes
|
||||||
|
|
||||||
|
for node in permitted_nodes:
|
||||||
|
if frappe.db.get_value(group_type, node, "is_group"):
|
||||||
|
nodes.extend([d.name for d in get_child_nodes(group_type, node)])
|
||||||
|
else:
|
||||||
|
nodes.append(node)
|
||||||
|
|
||||||
|
return nodes
|
||||||
|
|
||||||
|
|
||||||
def get_child_nodes(group_type, root):
|
def get_child_nodes(group_type, root):
|
||||||
lft, rgt = frappe.db.get_value(group_type, root, ["lft", "rgt"])
|
lft, rgt = frappe.db.get_value(group_type, root, ["lft", "rgt"])
|
||||||
return frappe.db.sql(
|
return frappe.db.sql(
|
||||||
|
|||||||
@@ -115,6 +115,14 @@ def filter_result_items(result, pos_profile):
|
|||||||
result["items"] = [item for item in result.get("items") if item.get("item_group") in pos_item_groups]
|
result["items"] = [item for item in result.get("items") if item.get("item_group") in pos_item_groups]
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def get_parent_item_group():
|
||||||
|
# Using get_all to ignore user permission
|
||||||
|
item_group = frappe.get_all("Item Group", {"lft": 1, "is_group": 1}, pluck="name")
|
||||||
|
if item_group:
|
||||||
|
return item_group[0]
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_items(start, page_length, price_list, item_group, pos_profile, search_term=""):
|
def get_items(start, page_length, price_list, item_group, pos_profile, search_term=""):
|
||||||
warehouse, hide_unavailable_items = frappe.db.get_value(
|
warehouse, hide_unavailable_items = frappe.db.get_value(
|
||||||
|
|||||||
@@ -38,8 +38,13 @@ erpnext.PointOfSale.ItemSelector = class {
|
|||||||
|
|
||||||
async load_items_data() {
|
async load_items_data() {
|
||||||
if (!this.item_group) {
|
if (!this.item_group) {
|
||||||
const res = await frappe.db.get_value("Item Group", { lft: 1, is_group: 1 }, "name");
|
frappe.call({
|
||||||
this.parent_item_group = res.message.name;
|
method: "erpnext.selling.page.point_of_sale.point_of_sale.get_parent_item_group",
|
||||||
|
async: false,
|
||||||
|
callback: (r) => {
|
||||||
|
if (r.message) this.parent_item_group = r.message;
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (!this.price_list) {
|
if (!this.price_list) {
|
||||||
const res = await frappe.db.get_value("POS Profile", this.pos_profile, "selling_price_list");
|
const res = await frappe.db.get_value("POS Profile", this.pos_profile, "selling_price_list");
|
||||||
|
|||||||
Reference in New Issue
Block a user