Merge pull request #17261 from rohitwaghchaure/pos_not_working_if_user_can_access_more_than_one_company_develop
fix: POS not working if user has access of multiple company(Cherry-pick)
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index 4c0f42d..308b8ed 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -54,15 +54,39 @@
this.prepare_menu();
this.set_online_status();
},
- () => this.setup_company(),
() => this.make_new_invoice(),
() => {
+ if(!this.frm.doc.company) {
+ this.setup_company()
+ .then((company) => {
+ this.frm.doc.company = company;
+ this.get_pos_profile();
+ });
+ }
+ },
+ () => {
frappe.dom.unfreeze();
},
() => this.page.set_title(__('Point of Sale'))
]);
}
+ get_pos_profile() {
+ return frappe.xcall("erpnext.stock.get_item_details.get_pos_profile",
+ {'company': this.frm.doc.company})
+ .then((r) => {
+ if(r) {
+ this.frm.doc.pos_profile = r.name;
+ this.set_pos_profile_data()
+ .then(() => {
+ this.on_change_pos_profile();
+ });
+ } else {
+ this.raise_exception_for_pos_profile();
+ }
+ });
+ }
+
set_online_status() {
this.connection_status = false;
this.page.set_indicator(__("Offline"), "grey");
@@ -77,6 +101,11 @@
});
}
+ raise_exception_for_pos_profile() {
+ setTimeout(() => frappe.set_route('List', 'POS Profile'), 2000);
+ frappe.throw(__("POS Profile is required to use Point-of-Sale"));
+ }
+
prepare_dom() {
this.wrapper.append(`
<div class="pos">
@@ -489,7 +518,7 @@
setup_company() {
return new Promise(resolve => {
- if(!frappe.sys_defaults.company) {
+ if(!this.frm.doc.company) {
frappe.prompt({fieldname:"company", options: "Company", fieldtype:"Link",
label: __("Select Company"), reqd: 1}, (data) => {
this.company = data.company;
@@ -529,6 +558,10 @@
return new Promise(resolve => {
if (this.frm) {
this.frm = get_frm(this.frm);
+ if(this.company) {
+ this.frm.doc.company = this.company;
+ }
+
resolve();
} else {
frappe.model.with_doctype(doctype, () => {
@@ -545,6 +578,7 @@
frm.refresh(name);
frm.doc.items = [];
frm.doc.is_pos = 1;
+
return frm;
}
}
@@ -554,6 +588,10 @@
this.frm.doc.company = this.company;
}
+ if (!this.frm.doc.company) {
+ return;
+ }
+
return new Promise(resolve => {
return this.frm.call({
doc: this.frm.doc,
@@ -562,8 +600,7 @@
if(!r.exc) {
if (!this.frm.doc.pos_profile) {
frappe.dom.unfreeze();
- setTimeout(() => frappe.set_route('List', 'POS Profile'), 2000);
- frappe.throw(__("POS Profile is required to use Point-of-Sale"));
+ this.raise_exception_for_pos_profile();
}
this.frm.script_manager.trigger("update_stock");
frappe.model.set_default_values(this.frm.doc);